當我使用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