我想知道,
之间有什么区别吗?在C#中,哪一个更好?if(a == 5)或if(5 == a)
答案 0 :(得分:18)
没有区别 - 假设“a”是一个整数。
我知道有些人更喜欢if (5==a)
,因为在c& c ++如果您错误地写了if (5=a)
,那么if (a=5)
会导致编译错误。
C#在后一种情况下会引发编译错误,所以这不是问题。
答案 1 :(得分:8)
我实际上说有一点不同,但它不是技术性的(因为每个人都已经很好地覆盖了) - 可读性。这很重要,第一种形式很多更自然。
答案 2 :(得分:6)
if(5 == a)
结构在C / C ++中很常见,因为布尔值是使用整数表示的。因此,如果您错误地编写a = 5
,则可以在if
的上下文中对其进行评估,这很可能不是您想要的。
在C#中没有从int
到bool
的隐式转换,因此如果您键入=
而不是==
,则会出现编译错误。
答案 3 :(得分:5)
没有区别,如果c / c ++中有(a = 5),这是一个很老的习惯。
这些问题/答案大致相同:
答案 4 :(得分:3)
两者都是等价的。 我记得当我以前在C中编码时,我更喜欢'if(5 == a)'因为它保证我没有输入5 = a意外,因为编译器会抛出错误。如果我们写'if(a = 5)'就不会发生这种情况。虽然它是一个拼写错误,但它不会产生任何编译器错误,并且会被忽视。
但是,在C#中并非如此。编写'if(5 == a)'没有逻辑上的理由。如果我们写了'if(a = 5)',编译器会抛出错误。所以在C#中使用'if(a == 5)'!
答案 5 :(得分:1)
如果设计正确,“a == 5”和“5 == a”之间没有区别。但是有一些特殊的情况,其中有“a == 5”和“5 == a”不同的行为。这是非常不可行的,但它是可行的。
然而,这个例子是为了证明这种情况而构建的,我不推荐认为这样做。
示例:
public class BadClass {
public int Value;
public static implicit operator int( BadClass c ) {
return c.Value;
}
//public static implicit operator BadClass( int n ) {
// return new BadClass { Value = n };
//}
public static bool operator ==( BadClass c, int n ) {
return (c.Value + 1 == n);
}
public static bool operator !=( BadClass c, int n ) {
return (c.Value + 1 != n);
}
public override bool Equals( object obj ) {
if ( obj is int ) {
return (this == (int)obj);
}
else {
return base.Equals( obj );
}
}
public override int GetHashCode() {
return base.GetHashCode();
}
}
...
BadClass a = new BadClass { Value = 13 };
var rslt_1 = (13 == a); //there will be true
var rslt_2 = (a == 13); //there will be false
答案 6 :(得分:0)
除了安全if (5==a)
给你,否。
答案 7 :(得分:0)
唯一区别在于,如果您忘记了第二个等号,则第一个版本仍然是有效语句,而第二个版本将引发编译时错误。
HTH
欢呼声,