这对我来说似乎一团糟,我的思绪告诉我必须有一个更好的方法。
我在网页上有6个控件。
if (printer_make_1.Text != "" && printer_model_1.Text != "" && printer_make_2.Text != "" && printer_model_2.Text != "" && printer_make_3.Text != "" && printer_model_3.Text != "")
{
// Do something
}
最好/最有效的方法是什么?
答案 0 :(得分:6)
如果您想提高可读性或在其他地方使用相同的逻辑,您可以重构为方法:
public Boolean AllControlsHaveAValue() {
return (printer_make_1.Text != ""
&& printer_model_1.Text != ""
&& printer_make_2.Text != ""
&& printer_model_2.Text != ""
&& printer_make_3.Text != ""
&& printer_model_3.Text != "");
}
然后问:
if (AllControlsHaveAValue()) {
// do something
}
答案 1 :(得分:5)
重组从您的数据开始:避免printer_make_1
,printer_make_2
,...
class PrinterData
{
public string Make { get; set; }
public string Model { get; set; }
}
PrinterData[] printers = new PrinterData[3]; //or use a List<>
printers[0] = new PrinterData { Make = "PH", Model = "1A" };
...
if (printers.All(p => ! (p.Make == "" || p.Model == "")) )
...
答案 2 :(得分:3)
if(new[] { printer_make_1, printer_model_1 ...}.All(l => l.Text != string.Empty)
{
//do something
}
您可能希望将其拆分为更具可读性:
var labels = new[] { printer_make_1, printer_model_1 ... };
if(labels.All(l => l.Text != string.Empty))
{
//do something
}
答案 3 :(得分:2)
我通常将该测试放入一个方法中并调用它来使if更容易阅读
private boolean AreAllPrinterFieldsFilled()
{
return (printer_make_1.Text != ""
&& printer_model_1.Text != ""
&& printer_make_2.Text != ""
&& printer_model_2.Text != ""
&& printer_make_3.Text != ""
&& printer_model_3.Text != "");
}
然后在if:
if (AreAllPrinterFieldsFilled)
{
// Do something
}
答案 4 :(得分:1)
有很多方法可以实现这一点 - 它们都不优雅。 做最可读的事情(以及那些可能落后于你的人)。
我可能会采用这种方法:
string makeText = String.Concat(printer_make_1.Text, printer_make_2.Text, printer_make_3.Text);
string modelText = String.Concat(printer_model_1.Text, printer_model_2.Text, printer_model_3.Text);
if (makeText.Length != 0 && modelText.Length != 0)
{
// Do something
}
答案 5 :(得分:0)
if (!Enumerable.Range(1, 3)
.Any(i => ((TextBox)FindControl("printer_make_" + i)).Text == "" ||
((TextBox)FindControl("printer_model_" + i)).Text == "") {...}
它允许您稍后扩展打印机品牌和型号的数量,但不是那么强类型。
答案 6 :(得分:0)
private bool CheckAllEmpty(params TextBox[] textBoxes)
{
return textBoxes.All(tb => tb.Text != null);
}
private void Foo()
{
...
if (CheckAllEmpty(tb1, tb2, tb3))
{
mbox("tb1, tb2 and tb3 are all empty");
}
else
{
mbox("tb1, tb2 or tb3 isn't empty");
}
...
}