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#中没有从intbool隐式转换,所以如果你键入=而不是==你将得到一个编译错误。

没有区别,如果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

干杯,