2 回答

TA貢獻1943條經(jīng)驗 獲得超7個贊
一種選擇是預先構建操作字典。
例如
var states = new[]
{
new { Checkboxes= new []{chk1,chk2,chk3,chk4},Action = new Action(()=>{ /* Do something */ })},
new { Checkboxes= new []{chk1,chk2,chk3},Action = new Action(()=>{ /* Do something */ })},
new { Checkboxes= new []{chk1,chk2,chk4},Action = new Action(()=>{ /* Do something */})},
// and so on
};
states.First(x=>x.Checkboxes.All(c=>c.Checked)).Action();

TA貢獻1824條經(jīng)驗 獲得超5個贊
如果您只是想知道如何訪問復選框的每個組合,則可以執(zhí)行正在執(zhí)行的操作,也可以合并if
if (chk1.Checked && chk2.Checked && chk3.Checked && chk4.Checked)
// do something
else if (chk1.Checked && chk2.Checked && chk3.Checked && !chk4.Checked)
// do something
else if (chk1.Checked && chk2.Checked && !chk3.Checked && chk4.Checked)
...
或者用Bits,Binary Literals(C#7)和a來獲得一些花哨的東西,你可以做一些事情switch
int BoolsToInt(params bool[] values)
=> values.Aggregate(0, (current, value) => current << (value ? 1 : 0));
...
var val = BoolsToInt(chk1.Checked, chk2.Checked, chk3.Checked, chk4.Checked);
switch (val)
{
case 0b0000: break;
case 0b0001: break;
case 0b0010: break;
case 0b0011: break;
case 0b0100: break;
case 0b0101: break;
case 0b0110: break;
case 0b0111: break;
case 0b1000: break;
case 0b1001: break;
case 0b1010: break;
case 0b1011: break;
case 0b1100: break;
case 0b1101: break;
case 0b1110: break;
case 0b1111: break;
}
注意:我不太確定最后一個選項是否更干凈,而且更多是因為我只想使用二進制文字。 ifs可能是最好的選擇
或受到其他答案的啟發(fā)
private static Dictionary<int, Action> _dict;
...
_dict = new Dictionary<int, Action>()
{
{ 0b0000, () => DoStuff0() },
{ 0b0001, () => DoStuff1() },
{ 0b0010, () => DoStuff2() },
{ 0b0011, () => DoStuff3() },
{ 0b0100, () => DoStuff4() },
{ 0b0101, () => DoStuff5() },
{ 0b0110, () => DoStuff6() },
{ 0b0111, () => DoStuff7() },
{ 0b1000, () => DoStuff8() },
{ 0b1001, () => DoStuff9() },
{ 0b1010, () => DoStuff10() },
{ 0b1011, () => DoStuff11() },
{ 0b1100, () => DoStuff12() },
{ 0b1101, () => DoStuff13() },
{ 0b1110, () => DoStuff14() },
{ 0b1111, () => DoStuff15() },
};
用法
var combination = BoolsToInt(chk1.Checked, chk2.Checked, chk3.Checked, chk4.Checked);
dict[combination].Invoke();
- 2 回答
- 0 關注
- 147 瀏覽
添加回答
舉報