String.Equals 和运算符 == 之间的无限调用循环

本文关键字:无限 调用 循环 之间 运算符 String Equals | 更新日期: 2023-09-27 18:36:36

我的一个朋友在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 终止!)

String.Equals 和运算符 == 之间的无限调用循环

显然是这样,至少根据公认的答案。

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

你打败了我,绍艾布。当您的答案发布时,我也试图滑入我的第一个回答问题。:)

听起来缺少的是强制

转换为"对象",这将强制编译器使用 Object 中的 Equals 方法,并防止无限循环。