在C#中,if(a==5)和if(5==a)有什么区别吗?

3

我想知道在C#中,if (a==5)和if (5==a)有什么区别?哪一个更好?


我相信这个问题已经被复制了很多遍。 - ArielBH
请查看此链接:https://dev59.com/l0bRa4cB1Zd3GeqP5ftQ - rahul
8个回答

19

假设"a"是一个整数,那么这两种写法没有区别。

我知道有些人更喜欢使用if (5==a),因为在C和C++中,如果你错误地写成if (5=a),你会得到一个编译器错误,而if (a=5)则会导致错误发生。

C#在后一种情况下会引发编译器错误,所以这不是一个问题。


这取决于什么是“a”。请看我的回答。 但一般来说,你是正确的。 - TcKs
我当时假设"a"是一个整数! - ChrisF

9

实际上,我认为有所不同,但这并不是技术上的区别(正如大家已经很好地解释了)- 可读性。这很重要,第一种形式更加自然。


7

在C/C++中,if(5 == a)结构很常见,因为布尔值使用整数表示。因此,如果您错误地编写了a = 5,这可能会在if的上下文中进行评估,这很可能不是您想要的结果。

在C#中,没有从intbool的隐式转换,因此如果您输入=而不是==,将会得到一个编译错误。


5

3
两种写法是等价的。我记得以前在写C代码时,我更喜欢使用'if(5==a)'这种写法,因为它可以确保我没有意外地把5=a打成了赋值符号而导致编译器出错。如果我们写成'if(a=5)',虽然只是一个笔误,但不会产生任何编译器错误并且可能被忽略。
但在C#中情况并非如此。没有逻辑上的理由去写'if(5==a)'。如果我们写成'if(a=5)',编译器会报错。所以在C#中请使用'if(a==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

0

除了 if (5==a) 可以保证安全性之外,没有别的。


2
在C#中,没有额外的安全性,因为不允许使用(a=5)。 - Brian Rasmussen
@Brian:如果“a”是一些自定义类型,可以从int隐式转换并隐式转换为bool,则可以允许使用“if(a=5)”。 - TcKs
@TcKs:没错,但你并不经常看到这些,对吧?对于布尔值,如果明确与 true 进行比较,就可以进行赋值而不是比较的错误,这是避免 if (b == true) 的另一个好理由。 - Brian Rasmussen

0

唯一的区别是如果你忘记了第二个等号,第一个版本仍然是有效的语句,而第二个版本将会引发编译时错误。

希望对你有所帮助。

祝好!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接