Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C嵌套的IFs或条件?_C#_If Statement - Fatal编程技术网

C# C嵌套的IFs或条件?

C# C嵌套的IFs或条件?,c#,if-statement,C#,If Statement,哪一个更好?性能方面和最佳实践方面。为什么 if ((process_checking == true) && (standard_output.Contains("0"))) { } else if ((process_checking == true) && (standard_output.Contains("1"))) { } 或 第一个必须检查两次process_检查的值,因此性能会非常非常糟糕,可以忽略不计。当然,关于0和1的假设,第一个必须检查1,

哪一个更好?性能方面和最佳实践方面。为什么

if ((process_checking == true) && (standard_output.Contains("0")))
{
}
else if ((process_checking == true) && (standard_output.Contains("1")))
{
}


第一个必须检查两次process_检查的值,因此性能会非常非常糟糕,可以忽略不计。当然,关于0和1的假设,第一个必须检查1,这是一个额外的工作

真正的区别在于可读性。第二个更具可读性-非常清楚您在做什么,如果process_checking不正确,则会跳过整个块


只要嵌套不太深,当增加可读性时,一点嵌套肯定是首选的。

第二个实例更优越,因为它只执行一次过程检查比较。由于您说只有一个0或1输入已经过验证,我假设这就是您的process_checking标志的作用,它不会调用.Contains方法两次,从而保存另一个函数调用和比较

使用布尔变量(如process_checking)可以做的另一件好事是将其作为该条件的唯一部分,就像使用.Contains方法一样:

if (process_checking) 
{
    if (standard_output.Contains("0")) { /*stuff*/ }
    else { /*other stuff*/ }
}

在我看来,第二个版本更好,因为您不需要重复检查条件的过程。它更具可读性,因为控制流更易于识别和理解,而且它的性能可能会稍微好一点,因为如果第一个if子句失败,您无需重新计算流程检查。但这只是我的看法,;其他人可能会有不同的观点…

在我看来,两者的结合会产生更好的结果,因为有时你只处理两个或三个选项,然后你使用if,else if,更一般地说,经常使用if和else,更好的主意是

if(condition = true)
{
// statements
}
else if(other condition = true)
{
// statements
}
else
{
// for all general options, which you have'nt addressed
}

更好的条件是什么?性能、可读性、维护?另外,如果只有0或1个值,则不需要使用contains解释为什么这可能会被否决。@Fendy。恕我直言,我不同意你的观点。不要解决不是问题的问题。有时候我们只是想知道别人怎么想来提高自己。这不就是为什么吗?讨论?没有。这可能更适合codereview.stackexchange.com。我同意,但我要补充的是,编译器可能会优化掉第一个示例中的第二个进程检查。这并不能成为它可读性差的借口。比我懒惰得多的人甚至可以尝试一下,检查MISL输出,并让我们都知道结果@dgvid很好,没有考虑到这一点-优化器确实找到了创造性的方法来帮助处理类似的事情。但我也不想打开一个IL反汇编程序来尝试
if(condition = true)
{
// statements
}
else if(other condition = true)
{
// statements
}
else
{
// for all general options, which you have'nt addressed
}