2015-04-25 46 views
2

我有時候自己寫代碼,需要將幾層if/else語句合併到一起(例子可以在下面找到)。
我想知道是否可以縮短一點,因爲有時候我有超過70行代碼的if/else語句的樹,而且它們實際上只是填充得太多而不是多少行看起來多餘。有沒有一種更簡單的方法來寫幾個if/else語句到彼此?

下面是一個例子代碼:

if (labelGiveTip1.Visible == true) 
{ 
    if (labelGiveTip2.Visible == true) 
    { 
     labelGiveTip3.Visible = true; 
     if (labelGiveTip3.Visible == true) 
     { 
      Custom_DialogBox.Show("All of your hints for this assignment is used, do you want annother assignmment?", //main text argument 
       "Error: No more hints", //header argument 
       "Back",     //first button text argument 
       "Get a new assignment"); //second button text argument 
             //this is a custom dialog box 

      result = Custom_DialogBox.result; 
      switch (result) 
      { 
       case DialogResult.Yes: 
        buttonNextAssignment.PerformClick(); 
        break; 

       case DialogResult.Cancel: 
        break; 

       default: 
        break; 
      } 
     } 
    } 
    else 
    { 
     labelGiveTip2.Visible = true; 
    } 
} 
else 
{ 
    labelGiveTip1.Visible = true; 
} 
+3

'labelGiveTip3.Visible = true; if(labelGiveTip3.Visible == true){}'這個條件看起來似乎沒有必要,因爲它總會是真的。 – mcserep

+1

就我個人而言,我討厭代碼,其中布爾表達式具有與「if(condition == true)」和「if(condition == false)」一樣的真或假的額外比較。我更喜歡'if(condition)'和'if(!condition)'。 –

+0

我嘗試使用一般規則,如果一種方法跨越一個全屏垂直,那麼它需要重構。所以如果你有70行代碼,那麼你太過分了。 – Enigmativity

回答

2

您可以檢查條件的否定變種和使用else if條件,以避免太多嵌套。例如。爲您的代碼的簡化版本:

if (!labelGiveTip1.Visible) 
    labelGiveTip1.Visible = true; 
else if(!labelGiveTip2.Visible) 
    labelGiveTip2.Visible = true; 
else 
{ 
    labelGiveTip3.Visible = true; 
    Custom_DialogBox.Show("All of your hints for this assignment is used, do you want annother assignmment?", //main text argument 
     "Error: No more hints", //header argument 
     "Back",     //first button text argument 
     "Get a new assignment"); //second button text argument 
           //this is a custom dialog box 



    result = Custom_DialogBox.result; 
    switch (result) 
    { 
     case DialogResult.Yes: 
      { 
       buttonNextAssignment.PerformClick(); 
       break; 
      } 
     case DialogResult.Cancel: 
      { 
       break; 
      } 
     default: 
      { 
       break; 
      } 
    } 
} 

也不必寫labelGiveTip1.Visible == truelabelGiveTip1.Visible == false時,他們已經布爾值。

3

在我的代碼中,我傾向於首先檢查錯誤情況並儘快返回。多年來,這種方法幫助我減少了嵌套深度。除此之外,嘗試將相關功能分爲不同的方法。示例方法提供了太多的邏輯到一個方法。如果你有ReSharper,這意味着很好的改進,並在一段時間內成爲一種習慣。

相關問題