C# 正在使用';如果(变量==true)';在if语句中,与';如果(变量)';?
因此,我最近在网上查看了一些代码,发现有人同时使用以下两种语句,这让我好奇它们之间是否有区别C# 正在使用';如果(变量==true)';在if语句中,与';如果(变量)';?,c#,.net,C#,.net,因此,我最近在网上查看了一些代码,发现有人同时使用以下两种语句,这让我好奇它们之间是否有区别 if (true == true) { ... } - 我假设第一条语句会检查true等于true这一事实是否为true(如果我有点混淆,请原谅),第二条语句只是检查true是否等于true。这里唯一的不同是true==true的计算结果为true。同样,如果您将false==false放入,则其计算结果为true。只要把true放进去就行了,它不需要计算,只需要true 通常你会看到人们把if
if (true == true) {
...
}
-
我假设第一条语句会检查true等于true这一事实是否为true(如果我有点混淆,请原谅),第二条语句只是检查true是否等于true。这里唯一的不同是
true==true
的计算结果为true
。同样,如果您将false==false
放入,则其计算结果为true
。只要把true
放进去就行了,它不需要计算,只需要true
通常你会看到人们把if(flag==true)
放进去,而他们同样可以把if(flag)
放进去。详细的方法通常用于显式地显示正在发生的事情——它可能读起来更清楚一些。我认为做相反的事情时读起来更好,即if(!flag)
与if(flag==false)
我觉得你在网上看到的代码只是多了一步,从
if(flag)
到if(flag==true)
到if(true==true)
,不管出于什么原因,当他们知道flag
总是true
[edit]出于某种原因,当我第一次发布这篇文章时,我认为我在问题上看到了一个javascript标记,因此答案是针对该语言编写的。我不说了,因为javascript的答案不是你所期望的;这仍然值得一读
在.Net世界中,两者之间通常没有功能上的区别。然而,考虑到VB能够进行隐式运行时转换,我并不惊讶地发现可以创建一个人为的示例,其中转换在一种情况下与另一种情况下不符合预期,特别是基于常量表达式是比较的第一项还是第二项(这给了您一个在VB中始终使用选项Strict
的好理由)
假设您的意思是,每个示例中的一个
true
代表一个更大的表达式,即:
if (expr == true) vs if (expr)
根据javascript的不同,可能会有所不同。请特别注意第5项和第6项:
if(expr==true)
样式的比较(反之亦然),布尔常量首先转换为一个数字,然后抽象比较规则重新启动。基本上,您是在将expr
与一个数字进行比较(除非expr
已经是布尔值)
然而,if(expr)
风格的比较会试图将expr
直接强制为布尔值。这里需要记住的是,很多事情会强制为true
布尔值,而该值在数值上并不等于true
的数值
例如:
if (3 == true)
{
alert('3 == true') //this will NOT show
}
else
{
alert('3 != true') // but this will
}
if (3)
{
alert('3') // this WILL also show
}
是的,存在差异。
if(o==true)
执行相等比较;if(o)
调用
为了用一个人为的例子进行说明,假设我们有以下类:
class Foo
{
public static bool operator true(Foo f) => true;
public static bool operator false(Foo f) => true;
public static bool operator == (Foo fb, bool b) => false;
public static bool operator !=(Foo fb, bool b) => false;
}
假设我们称之为:
Foo f = new Foo();
if (f) Console.WriteLine("A");
if (f == true) Console.WriteLine("B");
此段将“A”写入控制台。语句if(f)
调用true
运算符,该运算符返回true,因此打印“A”。语句if(f==true)
调用Foo.op_Equality(Foo,bool)
,该运算符返回false
if(o)
和if(o==true)
不同的一个值得注意的情况是o
类型为Nullable
。由于Nullable
没有定义true
运算符,if(o)
不编译。但由于Nullable.Equals(对象)
is,o==true
本身为true,如果(且仅当)o
有值且o.value
为true
对于布尔变量,
true
运算符只返回其值。因此,if(o)
和if(o==true)之间没有实际区别
ifo
是一个bool
这取决于语言和对象是否可以被计算。与您希望匹配的值进行显式比较会提供更多的控制。if(object)
如果对象存在并且有任何值,则可以简单地返回true,其中if(object==true)
表示仅当object
等于true
时,您才想输入该条件。如果您知道该对象始终是布尔值,或者您同意使用值计算对象是否存在,则if(object){}
,对您来说会很好。有些人这样做是为了可读性。有时为了善待我后面的人,我会明确地做一些事情,使他不必寻找声明。当我不想善待他人时,我会嵌套函数调用。这里唯一的不同是true==true
的计算结果为true代码>。同样,如果你把false==false
计算为true
。只要把true
计算为true就不需要了,它就是true
。如果(true==true)
,谁来写呢?我从未在任何C代码中看到过这一点……无论如何,如果您使用Resharper,它会在您执行true==true
时向您发出警告。但是生成的IL没有差异。或者您真的想问“if(booleansflag)
和if(booleansflag==true)
之间有什么区别?”
Foo f = new Foo();
if (f) Console.WriteLine("A");
if (f == true) Console.WriteLine("B");