我有以下代码段。
bool b = false;
if (b) {}
但我看到很多人写的东西如下:
if (true == b){}
它们对我来说都是一样的,这里有什么区别吗?
答案 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-CODEIL_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代码。因此两种方法完全相同。