2012-04-26 150 views
4

這段代碼是很多if/else,我想知道它是否可以簡化爲少數幾行。代碼工作得很好,但我更喜歡有更高效和更清潔的方式。這段代碼可以簡化嗎?

if (textBox_naam.Text.Length < 3) 
{ 
    textBox_naam.BackColor = Color.FromArgb(205, 92, 92); 
} 
else 
{ 
    textBox_naam.BackColor = Color.White; 
} 

if (textBox_email.Text.Length < 5) 
{ 
    textBox_email.BackColor = Color.FromArgb(205, 92, 92); 
} 
else 
{ 
    textBox_email.BackColor = Color.White; 
} 

if (textBox_body.Text.Length < 20) 
{ 
    textBox_body.BackColor = Color.FromArgb(205, 92, 92); 
} 
else 
{ 
    textBox_body.BackColor = Color.White; 
} 
+1

我們有一個代碼審查工作代碼的姊妹網站。 – 2012-04-26 21:59:39

+0

只是爲了澄清,它似乎是指代碼中的不同TextBox的?我幾乎要將分支報表合併成一個if ... else if ...但我認爲@達人的答案有幫助嗎? – Eniola 2015-12-02 21:53:03

回答

17

你最簡單的選擇(!沒有章法參與)將是:

SetBackColor(textBox_naam, 3, GOOD_COLOR, BAD_COLOR); 
SetBackColor(textBox_email, 5, GOOD_COLOR, BAD_COLOR); 
SetBackColor(textBox_body, 20, GOOD_COLOR, BAD_COLOR); 

像這樣定義的方法SetBackColor

public void SetBackColor(TextBox tb, int minLength, Color goodColor, Color badColor) 
{ 
    tb.BackColor = tb.Text.Length < minLength ? badColor : goodColor; 
} 
+3

您的意思是3,5,20 – sinelaw 2012-04-26 13:26:53

+0

@sinelaw,正確。更新。謝謝! – 2012-04-26 13:28:32

+0

鑑於「GOOD_COLOR」和「BAD_COLOR」在所有三種情況下都是相同的,所以沒有太多理由將它們作爲函數的參數。只需傳遞字段和長度,並讓它們成爲函數內的常量。 – mjfgates 2012-04-26 13:29:46

2

您可以使用三元如果然後其他運營商

textBox_naam.BackColor = textBox_naam.Text.Length < 3 ? Color.FromArgb(205, 92, 92) : Color.White; 

這不是任何更有效,但將使用較少的代碼行。

2

那麼你可以使用速記if語句...

Color other=Color.FromArgb(205,92,92); 
textBox_naam.BackColor=(textBox_naam.Text.Length<3?other:Color.White); 
textBox_email.BackColor=(textBox_email.Text.Length<5?other:Color.White); 
textBox_body.BackColor=(textBox_body.Text.Length<20?other:Color.White); 
0

您有整形器安裝?我想你會發現使用JetBrain的Reshaper擴展爲VS的一個偉大的(未來)援助。取決於它,它是偉大的必須擁有的工具爲.NET開發人員。

+0

您是否介意在這種情況下如何使用擴展? – Eniola 2015-12-02 21:57:50