2011-07-12 170 views
1

也許這是一個虛擬問題,但由於我不是C#專家,我認爲使用較少的代碼行可以更好地編寫此函數。減小函數大小

這就是:

public void chgnav(string wt, string nav) 
    { 
     if (wt == "enable") 
     { 
      if (nav == "prev") 
      { 
       pictureBox7.Visible = true; 
       pictureBox9.Visible = false; 
      } 
      else 
      { 
       pictureBox8.Visible = true; 
       pictureBox10.Visible = false; 
      } 
     } 
     else 
     { 
      if (nav == "prev") 
      { 
       pictureBox7.Visible = false; 
       pictureBox9.Visible = true; 
      } 
      else 
      { 
       pictureBox8.Visible = false; 
       pictureBox10.Visible = true; 
      } 

     } 
    } 

編輯:感謝大家,從我upvotes。我得到了我正在尋找的東西。

+3

沒有什麼可怕的錯誤。這些類型的問題也有codereview.stackexchange.com。 – 2011-07-12 17:48:59

+1

考慮將其更改爲「public void ShowNavigationUi(bool enableXXX,EnumNavType navType)」,並且不要嘗試在ns中使用sms smr - 難以閱讀並記住使用什麼方法。 –

回答

6
public void chgnav(string wt, string nav) 
{ 
    bool wtEnabled = wt == "enable"; 
    if (nav == "prev") 
    { 
     pictureBox7.Visible = wtEnabled; 
     pictureBox9.Visible = !wtEnabled; 
    } 
    else 
    { 
     pictureBox8.Visible = !wtEnabled; 
     pictureBox10.Visible = wtEnabled; 
    } 
} 

編輯:固定

6

我認爲,該方法的意圖是明確的,而且執行是乾淨的。它可能比你想要的長几行,但爲了幾行代碼而混淆是我書中的一個淨損失。

我會保持它的樣子。

+2

重命名變量「wt」和「nav」也不會是一件壞事,如果任何人(包括你未來的自己)會記住他們的意思...... –

+0

@bemused:約定...這會使意圖更清晰。 – Mark

1

這可能工作:

public void chgnav(string wt, string nav) 
{ 
     if (nav == "prev") 
     { 
      pictureBox7.Visible = (wt=="enable"); 
      pictureBox9.Visible = (wt!="enable"); 
     } 
     else 
     { 
      pictureBox8.Visible = (wt=="enable"); 
      pictureBox10.Visible = (wt!="enable"); 
     } 
} 

甚至:

public void chgnav(string wt, string nav) 
{ 
    (nav=="prev" ? pictureBox7 : pictureBox8).Visible = (wt=="enable"); 
    (nav=="prev" ? pictureBox9 : pictureBox10).Visible = (wt!="enable"); 
} 
0

,對你有有限的範圍內正常工作,但假設它是大10倍,並有更多的投入。

你想要的是一個'真值表'設置。

你有一個字典,需要一個對應於你的params的鍵。

給出PARAMS 'isBlue' 和 'isBig',你的字典鍵將

'FF' //沒藍或者大

'TF' //藍色,但是沒有大的

字典鍵會引導您獲取一個值,該值是對象,屬性名稱及其值的映射。

所以你的地圖可能是元組列表。哪裏Tuple <對象,字符串,對象>,或者簡單的一個結構。

然後你的代碼會做一些ifs來組成鍵,從字典中得到元組列表或結構體,在列表中運行列表以對每個對象進行適當的操作。