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

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)


the*_*ric 5

Char.Equals(control.SpecialChar, DEFAULT_CHAR)是一个电话Object.Equals(object, object),所以resharper在这里是正确的.

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