Char.Equals против Object.Equals - ReSharper предлагает мне использовать Object.Equals. Нужно ли мне?

По сути, мне интересно, стоит ли мне слушать 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 ответа

Решение

Невозможно переопределить static участники - Object.Equals() является статическим членом, и Char не может переопределить его, даже если вы можете вызывать его для типа Char (параметры все еще имеют тип Object)

Поэтому не имеет значения, звоните ли вы

Object.Equals(object yourChar, object anotherChar) 

или же

Char.Equals(object yourChar, object anotherChar)

так как бокс произойдет в любом случае.

Чтобы избежать этого, используйте метод экземпляра, который переопределяется в Char:

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

Char.Equals(control.SpecialChar, DEFAULT_CHAR) это вызов Object.Equals(object, object)так что резарпер тут правильный.

Я бы предложил использовать control.SpecialChar.Equals(DEFAULT_CHAR) или просто DEFAULT_CHAR == control.SpecialChar

Другие вопросы по тегам