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