2012-03-09 45 views
-1

在我的代码,我有一个叫做“老师”类有它内部的某些阵列:指定值的布尔数组是基于复选框

public class teacher 
    { 
     //monday 
     public bool[] mon = new bool[11]; 

     //tuesday 
     public bool[] tue = new bool[11]; 

     //wednesday 
     public bool[] wed = new bool[11]; 

     //thursday 
     public bool[] thu = new bool[11]; 

     //fri 
     public bool[] fri = new bool[11]; 
    }; 

还有教师的名单:

 List<teacher> teachers = new List<teacher>(); 

现在,一旦我点击一个添加老师的按钮,我希望这些数组填充相关复选框的值,即。

teachers.Add(new teacher 
     { 
      mon[0] = checkBox25.Checked, 
      mon[1] = checkBox26.Checked, 
      mon[2] = checkBox27.Checked, 
     } 

但它不会让我访问mon [0],因为它说“无效的初始化成员声明符”。有关如何分配值的任何想法?

我也改变了代码,最后一位为:

mon = {checkBox25.Checked, checkBox26.Checked, checkBox27.Checked, checkBox28.Checked, checkBox29.Checked, checkBox30.Checked, checkBox31.Checked, checkBox32.Checked, checkBox33.Checked, checkBox34.Checked, checkBox35.Checked}, 

,但现在它说,它无法初始化类型布尔[]的对象与集合初始化。

请问,如果有人知道如何处理 - 我会很感激。

回答

3

你最后的两个部分不会在初始化工作的原因是,你需要做的这个代替:

teachers.Add(new teacher 
    { 
     mon = new[] 
      { 
       checkBox25.Checked, 
       checkBox26.Checked, 
       checkBox27.Checked, 
       checkBox28.Checked, 
       checkBox29.Checked, 
       checkBox30.Checked, 
       checkBox31.Checked, 
       checkBox32.Checked, 
       checkBox33.Checked, 
       checkBox34.Checked, 
       checkBox35.Checked 
      }, 
     // etc... 
    }); 

您需要new[]在那里建造布尔的新数组,然后初始化程序列表指定其内容。

这就是说,你会更好收集您的复选框控制在一起(在一个数组或List<T>等),这样就可以在你的任务查询它们来代替,如:

teachers.Add(new teacher 
    { 
     mon = monCheckBoxes.Select(cb => cb.Checked).ToArray(), 
     tue = // etc... 
    }); 
+0

显然,你的初始化器的答案是正确的。我也怀疑这个操作方法有缺陷。每天有bool [11];我想知道该操作是否愿意将bools封装到DayMeta中(或者任何名称适合,DayConditionsList,DayOptionsCollection等)。我敢打赌,每个布尔都有一个含义,我会将它们表示为布尔字段/属性。 class DayMeta {bool IsAvailable ...},然后为每位教师的每一天申报一个“DayMeta”。 – payo 2012-03-09 18:04:34

+0

谢谢你们,我发现你们的答案真的很有帮助。是的,我是一个新手和自学的编码员,有时会犯上面那样的愚蠢错误。这就是说,我很高兴,还有像你这样的人帮助新手:) – Scalp994 2012-03-09 18:21:42