8

基本的に、この場合は ReSharper を聞くべきかどうか疑問に思っています...

ボックス化解除を回避するため、文字と比較すると Char.Equals(char) を使用する必要があると思われますが、Resharper は 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 の裏付けがあるからだと思いますか?

4

2 に答える 2

13

メンバーをオーバーライドすることはできませんstatic-Object.Equals()静的メンバーであり、Char タイプで呼び出すことはできますが、オーバーライドできません(params は引き続き type です) 。Char Object

したがって、呼び出しても問題ありません。

Object.Equals(object yourChar, object anotherChar) 

また

Char.Equals(object yourChar, object anotherChar)

どちらの場合もボクシングが発生するためです。

これを回避するには、 でオーバーライドされるインスタンス メソッドを使用しCharます。

if (yourChar.Equals(anotherChar)) doSomething();
于 2011-12-27T22:22:03.040 に答える
5

Char.Equals(control.SpecialChar, DEFAULT_CHAR)は への呼び出しObject.Equals(object, object)なので、ここでは resharper が正しいです。

control.SpecialChar.Equals(DEFAULT_CHAR) または単に 使用することをお勧めします DEFAULT_CHAR == control.SpecialChar

于 2011-12-27T22:21:57.137 に答える