C#IF语句,并且非常具体地做事情

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语句和更少的代码.

有没有办法在一个声明中这样做?这个特定的程序没有必要,但我想知道未来.

谢谢!

cdh*_*wie 5

我假设你开始使用这段代码:

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)

这比原始代码更冗长,但它将允许报告所有相关错误,而不是仅报告遇到的第一个错误.