我想知道在C#中,if (a==5)和if (5==a)有什么区别?哪一个更好?
我想知道在C#中,if (a==5)和if (5==a)有什么区别?哪一个更好?
假设"a"是一个整数,那么这两种写法没有区别。
我知道有些人更喜欢使用if (5==a)
,因为在C和C++中,如果你错误地写成if (5=a)
,你会得到一个编译器错误,而if (a=5)
则会导致错误发生。
C#在后一种情况下会引发编译器错误,所以这不是一个问题。
实际上,我认为有所不同,但这并不是技术上的区别(正如大家已经很好地解释了)- 可读性。这很重要,第一种形式更加自然。
在C/C++中,if(5 == a)
结构很常见,因为布尔值使用整数表示。因此,如果您错误地编写了a = 5
,这可能会在if
的上下文中进行评估,这很可能不是您想要的结果。
在C#中,没有从int
到bool
的隐式转换,因此如果您输入=
而不是==
,将会得到一个编译错误。
没有区别,避免在c/c++中使用if(a=5)是一种旧习惯。
这些问题/答案是关于同一个话题的:
在正确的设计下,“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
除了 if (5==a)
可以保证安全性之外,没有别的。
唯一的区别是如果你忘记了第二个等号,第一个版本仍然是有效的语句,而第二个版本将会引发编译时错误。
希望对你有所帮助。
祝好!