C#嵌套IF和条件?

时间:2013-03-27 15:25:04

标签: c# if-statement

哪一个更好?明智的表现和明智的最佳实践。为什么?

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

OR

if (process_checking==true)
{
   if (standard_output.Contains("0"))
   {
     blah
   }
   else
    //there is only 0 or 1 value
   {
      blah
   }
}

4 个答案:

答案 0 :(得分:5)

第一个必须两次查看process_checking的值,因此性能(非常非常可忽略地)更差。当然你对“0”和“1”的假设,第一个必须检查“1”,这是一个额外的工作。

真正的区别在于可读性。第二个更具可读性 - 很清楚你在做什么,如果process_checking不成立,则跳过整个块。

只要你没有太深的嵌套,当它增加可读性时,肯定会有一点点嵌套。

答案 1 :(得分:2)

在我看来,第二个版本更好,因为你不重复process_checking条件。它更具可读性,因为控制流更易于理解和理解,并且可能性能稍微高一些,因为如果第一个process_checking子句失败,您不需要重新计算if。但是,这只是我的意见;其他人可能有不同的看法......

答案 2 :(得分:1)

第二个实例是优越的,因为它只进行一次process_checking比较。并且因为你说只有0或1(输入已经被验证,我认为是你的process_checking标志的用途),它不会两次调用.Contains方法,因此保存了另一个函数调用和比较。

你可以用布尔变量(例如process_checking)做的另一个巧妙的事情就是让它成为该条件的唯一部分,就像你使用.Contains方法一样:

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

答案 3 :(得分:0)

在我看来,两者的结合会产生更好的结果,因为,有时您只会处理两个或三个选项,然后使用ifelse if而更常见,通常会使用{{ 1}} if,更好的想法是

else