Char.Equals против Object.Equals - ReSharper предлагает мне использовать Object.Equals.Нужно ли мне? - PullRequest
8 голосов
/ 28 декабря 2011

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

13 голосов
/ 28 декабря 2011

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

Следовательно, не имеет значения, звоните ли вы

Object.Equals(object yourChar, object anotherChar) 

или

Char.Equals(object yourChar, object anotherChar)

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

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

if (yourChar.Equals(anotherChar)) doSomething();
5 голосов
/ 28 декабря 2011

Char.Equals(control.SpecialChar, DEFAULT_CHAR) - это вызов Object.Equals(object, object), поэтому resharper здесь правильный.

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

...