这两种方法有什么区别?

时间:2014-09-23 10:10:00

标签: c# boolean

我有以下代码段。

bool b = false;
if (b) {}

但我看到很多人写的东西如下:

if (true == b){}

它们对我来说都是一样的,这里有什么区别吗?

5 个答案:

答案 0 :(得分:4)

bool b;
if (b) {}

您不能使用它,因为C#编译器不允许使用未分配的局部变量。

另一方面,

之间没有区别
bool b = true;
if (b) {}

bool b = true;
if (true == b){}

它们也生成相同的MSIL代码。但在我看来,第二个例子中的等式检查是不必要的。这就是if(b)看起来比if(true == b)更清晰的原因。

答案 1 :(得分:0)

不,没有区别。 (好吧,除了我想的打字字母的数量)。

bool b = true; //ensure you initialise it though!! (if it was **C** you wouldn't think not to!)

因此;

if(b)
{
 //doSomthing...
} 

表示

if(true)
{
 //doSomething...
}

<强>然而,

如果b被赋值为false,那么将跳过if语句;像这样:

bool b = false;
if(b)
{
//this won't be executed since b is false
}

至于你的问题,虽然你在开始时初始化b,然后是,它们会是相同的

答案 2 :(得分:0)

对我来说

if (true == b){}

非常不优雅。 遵循该风格取代

if (a == b){}

你应该把

if ((a == b) == true){}

依旧......

答案 3 :(得分:0)

if语句需要一个布尔表达式(条件)为true才能执行其块内的指令。如果将布尔值与另一个布尔值进行比较,您仍然会得到一个布尔结果,但是,除非您将两个布尔变量与未知值进行比较,否则您可能正在编写一段无用的代码。 为了更好地解释自己:

bool a, b;

// some computation

if(a == b)
{
    // do stuff
}

有道理,而

bool a;

// some computation

if(a == true)
{
    // do stuff
}

包含一些无用的代码(在我看来,它甚至会失去一些可读性),因为它相当于:

bool a;

// some computation

if(a)
{
    // do stuff
}

答案 4 :(得分:0)

代码:

bool b = true;
if (b) 
    Console.WriteLine("b-ok");
if (b==true)
    Console.WriteLine("b-true");

如果我们检查第一个 if

的IL-CODE
IL_000b:  ldloc.0
IL_000c:  ldc.i4.0
IL_000d:  ceq
IL_000f:  stloc.1
IL_0010:  ldloc.1            
IL_0011:  brtrue.s   IL_001e 
IL_0013:  ldstr      "b-ok"   
IL_0018:  call       void [mscorlib]System.Console::WriteLine(string)  
IL_001d:  nop

和第二个 if

IL_001e:  ldloc.0
IL_001f:  ldc.i4.0
IL_0020:  ceq
IL_0022:  stloc.1
IL_0023:  ldloc.1
IL_0024:  brtrue.s   IL_0031
IL_0026:  ldstr      "b-true"
IL_002b:  call       void [mscorlib]System.Console::WriteLine(string)
IL_0031:  ....

我们可以清楚地看到C#编译器为两个语句生成相同的IL代码。因此两种方法完全相同。