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 无法覆盖它,即使您可以在 Char 类型上调用它(参数仍然是 type 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 回答