哪个更适用于嵌套的if中的两个条件或者使用带有And的单个?

Nak*_*ary 16 c# vb.net

嵌套if或者如果使用And运算符,这是更好的方法吗?
单身如果与和

if (txtPackage.Text != string.Empty && txtPackage.Text == "abc")
{
   //
}
Run Code Online (Sandbox Code Playgroud)

嵌套如果

if (txtPackage.Text != string.Empty)
{ 
  if (txtPackage.Text == "abc")
  {
     //
  }
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*uri 7

我不打算进入,但看到这里的一些答案似乎是"我喜欢我的代码看起来像这样"......我觉得我应该说些什么:)

"更好"意味着代码执行速度更快,或者更易读/可扩展.你会想你的窝,如果在的情况下,你将可能有多个检查所有的都有一个共同的要求.

例:

if (myThingy != null)
{
    if (myThingy.Text = "Hello") ...

    if (myThingy.SomethingElse = 123) ...
}
Run Code Online (Sandbox Code Playgroud)

编辑:还需要说,嵌套你的IF需要比单个IF更多的CPU周期(因此"慢").最重要的是,您的条件顺序可以大大提高性能.

再次出现:

if (somethingQuick() && somethingThatTakesASecondToCalculate()) ...
Run Code Online (Sandbox Code Playgroud)

比(当然)更快

if (somethingThatTakesASecondToCalculate() && somethingQuick()) ...
Run Code Online (Sandbox Code Playgroud)

因为如果IF的第一部分失败,第二部分甚至不会被执行,从而节省了时间.

  • 在.NET 中,两个 IF 是否嵌套并不重要,它们都会转换为完全相同的 MSIL 代码。因此,嵌套不需要更多的 CPU 周期。但当然,这只是在最终结果相同的情况下。 (2认同)

its*_*att 6

如果事实上txtPackage.Text不为空但包含"abc"之外的其他内容,您是否会在'嵌套if'示例中执行不同的操作?

如果你不是,我会问你为什么要检查string.empty?

你可以写:

if (txtPackage.Text == "abc")
{

//

}
Run Code Online (Sandbox Code Playgroud)

并完成它.

完全取决于你最终想做什么.


小智 5

没有人提到维护该代码.哪个更容易调试?

如果失败了:

if (thisIsTrue && thisIsTrueToo)
    doStuff();
Run Code Online (Sandbox Code Playgroud)

你知道这两个陈述中的一个失败了,但不是哪一个.

如果失败了:

if (thisIsTrue) {
  if (thisIsTrueToo)
    doStuff();
}
Run Code Online (Sandbox Code Playgroud)

您的异常会告诉您行号.我说要方便维护,因为你可能不会永远使用这个代码.