String1.Equals(string2)和string1 == string2 C#之间的区别

smo*_*med 0 .net c# string if-statement

可能重复:
C#:String.Equals vs. ==
string.Equals()和==运算符是否真的相同?

有时在两个字符串之间的条件下,我写道:

if(string1==string2) //Do something
Run Code Online (Sandbox Code Playgroud)

有时我会写:

if(string1.Equals(string2)) //Do something
Run Code Online (Sandbox Code Playgroud)

问题是有时第一个不起作用,或者错误,这两个表达式之间有什么区别吗?

Jon*_*eet 10

只要两个操作数的编译时类型都是string第一个,它就会一直有效.

如果任一操作数的编译时类型不是string,它将使用正常的引用标识比较,而不是比较字符串是否相等.基本上你想要调用==(string, string)重载而不是正常的==(object, object)重载.

请注意,即使string1为null,第一个将成功,而第二个将NullReferenceException在这种情况下抛出.为了保留Equals调用但避免此问题的另一种方法是调用静态object.Equals(object, object)方法:

if (object.Equals(string1, string2))
Run Code Online (Sandbox Code Playgroud)

就个人而言,我只是==在编译时类型合适的情况下使用.