String.Equals和operator ==之间的无限调用循环

时间:2012-06-07 03:17:09

标签: c# .net string

我的一个朋友在String.cs中遇到了两个方法的有趣源代码:

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public static bool operator ==(string a, string b)
{
    return Equals(a, b); 
}

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public static bool Equals(string a, string b)
{
    return ((a == b) || (((a != null) && (b != null)) && EqualsHelper(a, b)));
}

为什么它不会导致无限循环? (我们所有的程序都将被StackOverflowException终止!)

2 个答案:

答案 0 :(得分:0)

显然是这样,至少根据接受的答案。

(在我有一定数量的代表之前我不能发表评论。很多。)

答案 1 :(得分:0)

你打败了我Shoaib。当你的答案被公布时,我也试图在我的第一个回答的问题中滑倒。 :)

听起来缺少的是对“对象”的强制转换,它会强制编译器使用Object中的Equals方法,这会阻止无限循环。