pla*_*t1K 0 c# if-statement minify
所以,首先,我看过这样的帖子:如何在不使用if语句的情况下找到哪个条件为真
这不是我需要的,虽然这个想法是相关的,因为我希望它是更易读的代码.
我认为Switch是最好的选择,但让我解释一下.
我有这样的声明:
if (input == string.Empty || typeComboBox.Text == null)
{
MessageBox.Show("Nothing to encrypt!", "Nothing Selected!");
return null;
}
Run Code Online (Sandbox Code Playgroud)
因此,这里的想法是,我曾经有过这种说法分成两个"IF"语句,这是不是一个大问题,但对于可读性起见,我要去减少了代码的努力,我想陈述成一个组合.
如果输入为空,我希望MessageBox.Show中的第一个参数出现,但不是第二个.
如果typeComboBox.Text为null,我希望第二个选项出现,但不是第一个.
如果它们都是真实的陈述,我希望两者都出现.
现在,我的目标是在不使用多个测试或方法的情况下完成这些操作.基本上,我的意思是:如果我能找到哪个条件是真的并且在同一个语句中得到结果数据,那将是理想的.
我认为交换机是一种选择,我还不太了解它们,但我认为这需要我根据这个测试的结果做出决策方法,并将结果发送给交换机; 这不是理想的,因为我可以简单地使用两个if语句和更少的代码.
有没有办法在一个声明中这样做?这个特定的程序没有必要,但我想知道未来.
谢谢!
我假设你开始使用这段代码:
if (input == string.Empty)
{
MessageBox.Show("Nothing to encrypt!");
return null;
}
if (typeComboBox.Text == null)
{
MessageBox.Show("Nothing Selected!");
return null;
}
Run Code Online (Sandbox Code Playgroud)
我根本不认为这个代码有任何问题,这可能是最具可读性的.它将根据需要执行尽可能多的测试,而不再执行.任何替代方案都会导致执行更多测试,即使您可能会使用更少的代码.例如:
if (input == string.Empty || typeComboBox.Text == null)
{
MessageBox.Show((input == string.Empty) ? "Nothing to encrypt!" : "Nothing Selected!");
return null;
}
Run Code Online (Sandbox Code Playgroud)
减少代码行数,但在失败情况下,将执行两到三次测试而不是一次或两次.它也不那么直截了当.
Terse代码很好,但是太简洁了,维护变得更难.可读性介于冗长和简洁之间,在我看来,在这种情况下,更冗长的代码更具可读性.
另一种选择是考虑报告多个错误的适当事实.为此,尝试这样的代码:
List<string> errors = new List<string>();
if (input == string.Empty)
{
errors.Add("Nothing to encrypt.");
}
if (typeComboBox.Text == null)
{
errors.Add("Nothing selected.");
}
if (errors.Count != 0)
{
MessageBox.Show(string.Join(" ", errors.ToArray()));
return null;
}
Run Code Online (Sandbox Code Playgroud)
这比原始代码更冗长,但它将允许报告所有相关错误,而不是仅报告遇到的第一个错误.