Char.Equals vs Object.Equals - ReSharper建议我应该使用Object.Equals。我是不是该?

时间:2011-12-27 22:05:20

标签: c# object char resharper object-equality

基本上,我想知道在这种情况下我是否应该听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支持?

2 个答案:

答案 0 :(得分:13)

无法覆盖static成员 - Object.Equals()是静态成员,而Char 无法覆盖它,即使您可以致电它在Char类型上(参数仍然是类型Object

因此,您是否致电

并无任何区别
Object.Equals(object yourChar, object anotherChar) 

Char.Equals(object yourChar, object anotherChar)

因为在任何一种情况下都会发生拳击。

要避免这种情况,请使用Char被覆盖的实例方法:

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

答案 1 :(得分:5)

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

我建议使用 control.SpecialChar.Equals(DEFAULT_CHAR) 要不就 DEFAULT_CHAR == control.SpecialChar