从 Richter 和这个讨论中,我希望任何两个“相同”的字符串都是相同的引用。但刚才在 LINQPad 中,我在这个主题上得到了不同的结果。这是代码:
void Main()
{
string alpha = String.Format("Hello{0}", 5);
string brava = String.Format("Hello{0}", 5);
ReferenceEquals(alpha, brava).Dump();
String.IsInterned(alpha).Dump();
String.IsInterned(brava).Dump();
alpha = "hello";
brava = "hello";
ReferenceEquals(alpha, brava).Dump();
}
以下是 Dump() 调用的结果:
False
Hello5
Hello5
True
我本来希望第一个和最后一个ReferenceEquals
都是True
. 发生了什么?
除了上面的例子,在其他什么情况下 ReferenceEquals 会失败?例如,多线程?
例如,如果我使用传递给方法的字符串参数作为对其进行锁定的对象,则此问题很重要。在这种情况下,参考最好是相同的!!!