Char.等于vs对象.Equals——ReSharper建议我应该使用Object.Equals.我应该



基本上,我想知道我是否应该在这个例子中听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支持?

不可能覆盖static成员- Object.Equals()是静态成员,Char 不能覆盖它,即使你可以调用 Char类型(参数仍然是Object类型)

因此,是否调用 是没有区别的。
Object.Equals(object yourChar, object anotherChar) 

Char.Equals(object yourChar, object anotherChar)

因为在两种情况下都会发生装箱。

为了避免这种情况,使用实例方法,在Char: 中被覆盖
if (yourChar.Equals(anotherChar)) doSomething();

Char.Equals(control.SpecialChar, DEFAULT_CHAR)是对Object.Equals(object, object)的调用,因此此处resharper是正确的。

我建议使用control.SpecialChar.Equals(DEFAULT_CHAR)或者只是DEFAULT_CHAR == control.SpecialChar

最新更新