【问题标题】:Assigning values to an array of bool's based on checkboxes基于复选框将值分配给布尔数组
【发布时间】:2012-03-27 03:59:08
【问题描述】:

在我的代码中,我有一个名为“teacher”的类,其中包含一些数组:

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},

但现在它说它不能用集合初始化器初始化 bool[] 类型的对象。

如果有人知道如何处理这个问题,我将不胜感激。

【问题讨论】:

    标签: c# arrays list initialization boolean


    【解决方案1】:

    最后两部分在初始化程序中不起作用的原因是您需要这样做:

    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[] 来构造新的 bool 数组,然后初始化列表指示其内容。

    也就是说,您最好将复选框控件收集在一起(以数组或List&lt;T&gt; 等形式),以便您可以在作业中查询它们,例如:

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

    【讨论】:

    • 显然,您的初始化程序答案是正确的。我也怀疑该操作的方法存在缺陷。每天都有 bool[11] ;我想知道操作是否更愿意将布尔值封装到 DayMeta 中(或任何适合的名称,DayConditionsList、DayOptionsCollection 等)。我打赌每个布尔值都有一个含义,我会将它们表示为布尔字段/属性。 class DayMeta { bool IsAvailable ... } 然后为每个 Teacher 中的每一天声明一个 DayMeta
    • 谢谢你们,我发现你们的两个答案都很有帮助。是的,我是一名新手和自学编码员,有时会犯上述愚蠢的错误。也就是说,我很高兴还有像你这样的人帮助新手:)
    猜你喜欢
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2021-11-23
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多