String.Equals(a,b)如何不产生StackOverflowException?
在检查String ==运算符时,我注意到它调用了String.Equals(string a, string b) ,意思是它只是一个传递。 
 检查String.Equals(string a, string b)方法,我发现它使用==运算符进行了相等性检查。 这是如何工作的,而不是像"x" == "x"或"x" == "y"这样的东西造成StackOverflowException ? 
更新 :我让JetBrains知道,他们把它作为dotPeek的关键优先事项。 https://youtrack.jetbrains.com/issue/DOTP-6789
我还在ILSpy的GitHub回购上添加了一个问题。

 你的反编译器有一个错误。  真正的代码不检查a == b ,它检查(Object)a == (Object)b ,绕过重载的操作符。 
  这是来自Microsoft的真实代码。 运算符==被实现为 s 
 public static bool operator == (String a, String b) { return String.Equals(a, b); } 
  operator ==调用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); } 
 正如你看到的,string相等的比较是使用if ((Object)a==(Object)b)将string转换为object ,然后进行比较来完成的。 所以这不会调用string类中的重载运算符== 。 
- ExpandoObject,DynamicObject和dynamic之间的区别
- 在Moq Callback()调用中设置variables值
- 如何在EF CF中设置POCO的默认值?
- 不能将types'System.Collections.Generic.IEnumerable <AnonymousType#1>'隐式转换为'System.Collections.Generic.List <string>
- Windows服务运行在什么目录?
- Cookie混淆与FormsAuthentication.SetAuthCookie()方法
- 如何在C#中模拟鼠标点击?
- 为什么代表参考types?
- 在WebRequest中强制执行基本身份validation