第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

避免 if-else 梯子中的重復條件

避免 if-else 梯子中的重復條件

C#
侃侃無極 2022-08-20 16:49:26
我有四個復選框。下面一個是我的代碼。我的問題是如何避免檢查狀態(tài)組合的代碼重復。法典:if (chk1.Checked){   if (chk2.Checked)   {      if (chk3.Checked)      {         if (chk4.Checked)         {         }         else         {         }      }      else      {         if (chk4.Checked)         {         }         else         {         }      }   }}與其他部分做同樣的事情。編輯:如果條件為真,我只想在字符串列表中添加一個項目。
查看完整描述

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();


查看完整回答
反對 回復 2022-08-20
?
滄海一幻覺

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();


查看完整回答
反對 回復 2022-08-20
  • 2 回答
  • 0 關注
  • 147 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號