C#中的if(a == 5)或if(5 == a)之间有什么区别吗?
我想知道,两者之间有什么区别
if(a == 5)或if(5 == a)
在C#中,哪一个更好?
没有区别 – 假设“a”是一个整数。
我知道有些人更喜欢if (5==a)
因为在c&c ++中,如果你错误地写了if (5=a)
,你会得到一个编译器错误而if (a=5)
会导致错误。
在后一种情况下,C#会引发编译器错误,所以这不是问题。
我实际上说有一点不同,但它不是技术性的(因为每个人都已经很好地涵盖了) – 可读性 。 这很重要,第一种forms更自然。
if(5 == a)
构造在C / C ++中很常见,因为布尔值是用int表示的。 因此,如果你错误地写a = 5
,那么可以在if
的上下文中进行评估,这很可能不是你想要的。
在C#中没有从int
到bool
隐式转换,所以如果你键入=
而不是==
你将得到一个编译错误。
没有区别,如果c / c ++中有(a = 5),这是一个很老的习惯。
这些问题/答案大致相同:
- (0 ==变量)或(null == obj):C#中过时的练习?
- 检查null,哪个更好? “null ==”或“== null”
- 为什么在C#中经常会看到“null!= variable”而不是“variable!= null”?
两者都是等价的。 我记得当我以前用C编码时,我更喜欢’if(5 == a)’,因为它保证我没有输入5 = a意外,因为编译器会抛出错误。 如果我们写’if(a = 5)’就不会发生这种情况。 虽然这是一个拼写错误,但它不会产生任何编译错误,也不会被忽视。
但是,在C#中并非如此。 编写’if(5 == a)’没有逻辑上的理由。 如果我们写了’if(a = 5)’,编译器会抛出错误。 所以在C#中使用’if(a == 5)’!
通过正确的设计,“a == 5”和“5 == a”之间没有区别。 但是有一些特殊的情况,其中有“a == 5”和“5 == a”不同的行为。 这是非常不可行的,但它是可行的。
然而,这个例子是为了certificate这种情况而构建的,我不建议这样做。
例:
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)
给你,不。
唯一不同的是,如果您忘记了第二个等号,则第一个版本仍然是有效语句,而第二个版本将引发编译时错误。
HTH
干杯,