在检查String ==
操作员时,我注意到它调用了String.Equals(string a, string b)
,这意味着它只是一个传递.
检查String.Equals(string a, string b)
方法,我看到它使用==
运算符进行相等性检查.这是如何实际工作并没有引起StackOverflowException
做这样的事情时,"x" == "x"
还是"x" == "y"
?
更新:我让JetBrains知道,他们把它作为dotPeek的关键优先事项.https://youtrack.jetbrains.com/issue/DOTP-6789
我还在ILSpy的GitHub回购中添加了一个问题.
Cri*_*nSO 50
public static bool operator == (String a, String b) {
return String.Equals(a, b);
}
Run Code Online (Sandbox Code Playgroud)
操作员==
调用String.Equals
实现为:
public static bool Equals(String a, String b) {
if ((Object)a==(Object)b) {
return true;
}
if ((Object)a==null || (Object)b==null) {
return false;
}
if (a.Length != b.Length)
return false;
return EqualsHelper(a, b);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,字符串相等性的比较是通过if ((Object)a==(Object)b)
将字符串转换为object
然后进行比较来完成的.所以这不会==
在字符串类中调用重载的运算符.
归档时间: |
|
查看次数: |
5867 次 |
最近记录: |