m-y*_*m-y 8 c# resharper object char 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)) { ... }
Run Code Online (Sandbox Code Playgroud)
我猜是因为有DependencyProperty支持?
Ada*_*dam 13
覆盖static成员是不可能的- Object.Equals()是一个静态成员,并且Char 不能覆盖它,即使你可以在Char类型上调用它(params仍然是类型Object)
因此,无论你打电话都没有区别
Object.Equals(object yourChar, object anotherChar)
Run Code Online (Sandbox Code Playgroud)
要么
Char.Equals(object yourChar, object anotherChar)
Run Code Online (Sandbox Code Playgroud)
因为在任何一种情况下都会发生拳击
要避免这种情况,请使用实例方法,该方法在以下位置被覆盖Char:
if (yourChar.Equals(anotherChar)) doSomething();
Run Code Online (Sandbox Code Playgroud)
Char.Equals(control.SpecialChar, DEFAULT_CHAR)是一个电话Object.Equals(object, object),所以resharper在这里是正确的.
我建议使用
control.SpecialChar.Equals(DEFAULT_CHAR)
或只是
DEFAULT_CHAR == control.SpecialChar