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