2012-04-26 147 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