C# 如何使这段代码更简单、更短

Šim*_*vák -1 .net c# winforms

我是初学者,我想问如何使这段代码更简单更短感谢所有回复

public static bool SelectedSingleAcc(SpecialForms.AccountManager am)
{
    //checkbox1
    if (am.selectedCB1.Checked == true 
        && am.selectedCB2.Checked == false  
        && am.selectedCB3.Checked == false  
        && am.selectedCB4.Checked == false  
        && am.selectedCB5.Checked == false  
        && am.selectedCB6.Checked == false  
        && am.selectedCB7.Checked == false  
        && am.selectedCB8.Checked == false) return true;
    //checkbox2
    if (am.selectedCB1.Checked == false  
        && am.selectedCB2.Checked == true  
        && am.selectedCB3.Checked == false  
        && am.selectedCB4.Checked == false  
        && am.selectedCB5.Checked == false  
        && am.selectedCB6.Checked == false  
        && am.selectedCB7.Checked == false  
        && am.selectedCB8.Checked == false) return true;
    //checkbox3
    if (am.selectedCB1.Checked == false  
        && am.selectedCB2.Checked == false  
        && am.selectedCB3.Checked == true  
        && am.selectedCB4.Checked == false  
        && am.selectedCB5.Checked == false  
        && am.selectedCB6.Checked == false  
        && am.selectedCB7.Checked == false  
        && am.selectedCB8.Checked == false) return true;
    //checkbox4
    if (am.selectedCB1.Checked == false  
        && am.selectedCB2.Checked == false  
        && am.selectedCB3.Checked == false  
        && am.selectedCB4.Checked == true  
        && am.selectedCB5.Checked == false  
        && am.selectedCB6.Checked == false  
        && am.selectedCB7.Checked == false  
        && am.selectedCB8.Checked == false) return true;
    //checkbox5
    if (am.selectedCB1.Checked == false  
        && am.selectedCB2.Checked == false  
        && am.selectedCB3.Checked == false  
        && am.selectedCB4.Checked == false  
        && am.selectedCB5.Checked == true  
        && am.selectedCB6.Checked == false  
        && am.selectedCB7.Checked == false  
        && am.selectedCB8.Checked == false) return true;
    //checkbox6
    if (am.selectedCB1.Checked == false  
        && am.selectedCB2.Checked == false  
        && am.selectedCB3.Checked == false  
        && am.selectedCB4.Checked == false  
        && am.selectedCB5.Checked == false  
        && am.selectedCB6.Checked == true  
        && am.selectedCB7.Checked == false  
        && am.selectedCB8.Checked == false) return true;
    //checkbox7
    if (am.selectedCB1.Checked == false  
        && am.selectedCB2.Checked == false  
        && am.selectedCB3.Checked == false  
        && am.selectedCB4.Checked == false  
        && am.selectedCB5.Checked == false  
        && am.selectedCB6.Checked == false  
        && am.selectedCB7.Checked == true  
        && am.selectedCB8.Checked == false) return true;
    //checkbox8
    if (am.selectedCB1.Checked == false  
        && am.selectedCB2.Checked == false  
        && am.selectedCB3.Checked == false  
        && am.selectedCB4.Checked == false  
        && am.selectedCB5.Checked == false  
        && am.selectedCB6.Checked == false  
        && am.selectedCB7.Checked == false  
        && am.selectedCB8.Checked == true) return true;
            
    return false;
}
Run Code Online (Sandbox Code Playgroud)

nvo*_*igt 6

// get all values into an array for easier handling:
values = new[] 
{
    am.selectedCB1.Checked,
    am.selectedCB2.Checked,
    am.selectedCB3.Checked,
    am.selectedCB4.Checked,
    am.selectedCB5.Checked,
    am.selectedCB6.Checked,
    am.selectedCB7.Checked,
    am.selectedCB8.Checked,
};

// find out if exactly one is true
return values.Count(val => val == true) == 1;
Run Code Online (Sandbox Code Playgroud)

也就是说......正确的 UI 决策是使用单选按钮而不是复选框。他们已经为您实现了这个逻辑。每当你发现自己对变量进行编号时,你都应该认真思考为什么这应该是一个数组,而应该是许多单个变量。

  • @YongShun `.Any(val => val)` 与 `.Count(val => val) == 1` 不同,除非您定义了 `val`,否则 `.Any(val)` 不会编译其他地方是接受布尔值并返回布尔值的某个委托的名称 (2认同)