2012-03-09 88 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