2011-12-27 55 views
8

基本上,我想知道在這種情況下是否應該聽ReSharper ...Char.Equals vs Object.Equals - ReSharper建議我應該使用Object.Equals。我是不是該?

你會發現,應該使用Char.Equals的Object.Equals(OBJ)。也許我在這裏錯過了一些東西?


private const DEFAULT_CHAR = '#'; 

// DependencyProperty backing 
public Char SpecialChar 
{ 
    get { return (Char)GetValue(SpecialCharProperty); } 
} 

// ReSharper - Access to a static member of a type via a derived type. 
if (Char.Equals(control.SpecialChar, DEFAULT_CHAR)) { ... } 

我猜這是因爲有一個DependencyProperty的後盾?

+0

從我的理解等號比較喜歡的東西或不同的,例如,你不會說對象A ==對象B,你會檢查那使用ObjectA.Equals(ObjectB) – MethodMan 2011-12-27 22:08:40

+2

什麼是實際的代碼行? ReSharper是否給出了任何推理建議? – 2011-12-27 22:09:07

+1

我的resharper不建議:) – 2011-12-27 22:09:36

回答

13

這是不可能覆蓋static成員 - Object.Equals()是一個靜態成員,和Char不能覆蓋它,即使你可以通話它在字符類型(參數仍然是Object類型)

因此,不管您是否撥打

Object.Equals(object yourChar, object anotherChar) 

Char.Equals(object yourChar, object anotherChar) 

因爲在這兩種情況下會發生拳。

爲了避免這種情況,使用實例方法,它Char覆蓋

if (yourChar.Equals(anotherChar)) doSomething(); 
+0

我期望resharper會建議我使用重寫的「Equals」實例版本。這是一個錯誤還是無法通過反射來檢測是否存在靜態成員的實例版本? – 2011-12-27 22:30:15

+0

請參閱@Joe White對此問題的評論 - ReSharper非常有幫助,但它無法爲您做所有事情。實際上,當我鍵入'Char'然後'.Equ'時,ReSharper似乎已經重寫了IntelliSense以隱藏** Object.Equals ... – Adam 2011-12-27 22:32:21

5

Char.Equals(control.SpecialChar, DEFAULT_CHAR)是致電Object.Equals(object, object),所以resharper在這裏是正確的。

我會建議使用 control.SpecialChar.Equals(DEFAULT_CHAR) 或只是 DEFAULT_CHAR == control.SpecialChar

相關問題