如何使用带有复选框的if语句而不会出现混乱

Jon*_*nas 2 .net c# checkbox if-statement

我有13个复选框的这个应用程序.
我想做if语句来检查文本框是否被选中,但是在检查了4个文本框之后它会变得非常混乱

if (checkBox1.IsChecked == true)
    {
          DoSomething();          
    }

else if (checkBox1.IsChecked == true && checkBox2.isChecked = false)
    {
          DoSomething();          
    }

else if (checkBox1.IsChecked == false && checkBox2.isChecked = true)
    {
          DoSomething();          
    }

else if (checkBox1.IsChecked == false && checkBox3.isChecked = true)
    {
          DoSomething();          
    }

else if (checkBox1.IsChecked == false && checkBox3.isChecked = false)
    {
          DoSomething();          
    }


else if (checkBox1.IsChecked == true && checkBox3.isChecked = false)
    {
          DoSomething();          
    }

else if (checkBox1.IsChecked == true && checkBox3.isChecked = true)
    {
          DoSomething();          
    }
Run Code Online (Sandbox Code Playgroud)

我打赌你已经可以看到模式..我需要检查13个复选框的每个可能的解决方案,有没有办法更有效地做到这一点?

das*_*ght 6

13个复选框给出2 13 = 8192种不同的组合.虽然很难想象一个系统需要最终用户区分这么多不同的可能性,但制作响应它们的程序却非常简单.

从每个复选框的0..12区间分配不同的"标记".遍历复选框,并从复选框的标签构造一个位掩码,如下所示:

var mask = 0;
// Below, comparison == true is required
// because IsChecked is Nullable<bool>
if (checkBox0.IsChecked == true) mask |= 1 << 0;
if (checkBox1.IsChecked == true) mask |= 1 << 1;
if (checkBox2.IsChecked == true) mask |= 1 << 2;
if (checkBox3.IsChecked == true) mask |= 1 << 3;
...
if (checkBox12.IsChecked == true) mask |= 1 << 12;
Run Code Online (Sandbox Code Playgroud)

现在mask具有0到8191之间的值,包括每个不同的复选标记组合.创建一个对应于每个组合的8192个动作的数组,然后调用

action[mask]();
Run Code Online (Sandbox Code Playgroud)

调用与所选组合对应的操作.