C#中的if(a == 5)或if(5 == a)之间有什么区别吗?

时间:2009-04-28 10:07:39

标签: c#

我想知道,

之间有什么区别吗?
  

if(a == 5)或if(5 == a)

在C#中,哪一个更好?

8 个答案:

答案 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#中没有从intbool的隐式转换,因此如果您键入=而不是==,则会出现编译错误。

答案 3 :(得分: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

欢呼声,