Object.ReferenceEquals返回不正确的结果(至少在Silverlight 3中)

时间:2010-11-05 12:58:20

标签: silverlight-3.0

我刚刚发现了一种非常奇怪的行为。我有一个带字符串属性的类。在这个属性的setter中,我首先将旧值与新值进行比较,如果值不同,则仅更改属性:

        set
        {
            if ((object.ReferenceEquals(this.Identifier, value) != true))
            {
                this.Identifier = value;
                this.RaisePropertyChanged("Identifier");
            }
        }

但是这个ReferenceEquals几乎总是返回false!即使我在Quick Watch中调用 object.ReferenceEquals(“test”,“test”),我也会得到错误。

这怎么可能?

1 个答案:

答案 0 :(得分:0)

那是因为C#中的strings are immutable

  

字符串对象的内容不能   在对象之后被更改   创建,虽然语法成功   好像你可以这样做。

由于您无法修改现有的字符串引用,因此重用它们没有任何好处。传递给属性设置器的值将始终是新的字符串引用,除非您执行this.Identifier = this.Identifier;

我将尝试用一个例子来澄清:

string s = "Hello, ";  // s contains a new string reference.
s += "world!";         // s now contains another string reference.