You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#复选框赋值方法优化咨询:WeeklyBooking类逻辑改进建议

优化你的复选框赋值逻辑

嘿,针对你这个周预约的复选框赋值场景,这里有几个实用的优化思路,能让代码更简洁、易维护:

1. 直接赋值替代冗余的if判断

你的原始代码里用了一堆if判断,但其实CheckBox.Checked本身就是bool类型,完全可以直接把它的值赋给对应的属性,没必要多此一举做条件判断。优化后的代码会更清爽:

private void CheckCBs(WeeklyBooking week)
{
    week.Monday = MondayCB.Checked;
    week.Tuesday = TuesdayCB.Checked;
    week.Wednesday = WednesdayCB.Checked;
    week.Thursday = ThursdayCB.Checked;
    week.Friday = FridayCB.Checked;
}

这样代码逻辑一目了然,减少了不必要的分支判断,可读性直接拉满。

2. 用映射集合消除重复代码

如果以后需要扩展到周六、周日,或者有更多类似的复选框要处理,重复写赋值语句会很繁琐。可以用键值对映射的方式,把复选框和对应的属性赋值操作关联起来,通过循环统一处理:

private void CheckCBs(WeeklyBooking week)
{
    var checkboxMappings = new Dictionary<CheckBox, Action<WeeklyBooking, bool>>
    {
        { MondayCB, (wb, value) => wb.Monday = value },
        { TuesdayCB, (wb, value) => wb.Tuesday = value },
        { WednesdayCB, (wb, value) => wb.Wednesday = value },
        { ThursdayCB, (wb, value) => wb.Thursday = value },
        { FridayCB, (wb, value) => wb.Friday = value }
    };

    foreach (var mapping in checkboxMappings)
    {
        mapping.Value(week, mapping.Key.Checked);
    }
}

这种方式的好处是:后续新增复选框时,只需要在字典里加一行映射关系就行,不用修改循环逻辑,符合开闭原则

3. 利用UI数据绑定彻底告别手动赋值

如果你用的是WinForms、WPF或者Blazor这类支持数据绑定的UI框架,更推荐直接把复选框的Checked属性和WeeklyBooking的对应属性做双向绑定。这样用户勾选/取消复选框时,WeeklyBooking对象的属性会自动同步,根本不需要写CheckCBs这个方法。

举个WinForms的简单例子(在窗体初始化时设置绑定):

private void Form_Load(object sender, EventArgs e)
{
    var weeklyBooking = new WeeklyBooking();
    // 双向绑定
    MondayCB.DataBindings.Add(nameof(MondayCB.Checked), weeklyBooking, nameof(weeklyBooking.Monday), false, DataSourceUpdateMode.OnPropertyChanged);
    TuesdayCB.DataBindings.Add(nameof(TuesdayCB.Checked), weeklyBooking, nameof(weeklyBooking.Tuesday), false, DataSourceUpdateMode.OnPropertyChanged);
    // 剩下的周三到周五同理
}

这种方式能最大程度减少UI和业务对象之间的耦合,代码更简洁,也不容易出错。

内容的提问来源于stack exchange,提问作者Tom Keenan

火山引擎 最新活动