当我使用SlSvcUtil.exe创建我的服务客户端文件,我看到这样的代码:“Object.ReferenceEquals”始终是假的,因为它是带一个值类型
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”始终是假的,因为它是带一个值类型
据我所知,strings are immutable,但我似乎收到每个属性的警告。
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
if ReferenceEquals
总是会返回false?
表达式Equals(this.CategoryField,value)'如何编译?在哪里得到'Equals()'方法?至于更大的问题,这听起来像是一个ReSharper错误。 System.String显然不是一个值类型,所以虽然使用'this.CategoryField.Equals(value)'而不是'object.ReferenceEquals()'可能更好,但具体的投诉Resharper似乎不是有效的。 – 2014-10-30 19:38:03
它编译得很好。它是'Object.Equals()'。 – 2014-10-30 19:48:46
啊,谢谢。我忘记了那个方法的静态版本。咄。无论如何,我仍然认为你正在查看一个Resharper错误。 – 2014-10-30 20:27:55