当我使用SlSvcUtil.exe创建服务客户端文件时,我看到如下代码:
private string CategoryField;
[System.Runtime.Serialization.DataMemberAttribute()]
public string Category
{
get
{
return this.CategoryField;
}
set
{
if ((object.ReferenceEquals(this.CategoryField, value) != true))
{
this.CategoryField = value;
this.RaisePropertyChanged("Category");
}
}
}
当我使用ReSharper检查它时,我收到以下警告:
'Object.ReferenceEquals' 始终为 false,因为它是使用值类型调用的
我知道字符串是不可变的,但我似乎对每个属性都收到了这个警告。
ReSharper建议如下:
注意:这包括我的自定义样式,将简单的 getter 放在一行上,反转if
,删除多余的object
限定符和!= true
比较
private string CategoryField;
[DataMember]
public string Category
{
get { return this.CategoryField; }
set
{
if (Equals(this.CategoryField, value)) { return; }
this.CategoryField = value;
this.RaisePropertyChanged("Category");
}
}
所以它真的引出了一个问题,为什么SlSvcUtil.exe使用ReferenceEquals
而不是Equals
ifReferenceEquals
总是会返回 false?