[英]Char.Equals vs Object.Equals — ReSharper suggests that I should use Object.Equals. Should I?
基本上,我想知道在這種情況下我是否應該聽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支持?
覆蓋static
成員是不可能的 - Object.Equals()
是一個靜態成員, Char
不能覆蓋它,即使你可以在Char類型上調用它(params仍然是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)
的調用,因此resharper在這里是正確的。
我建議使用control.SpecialChar.Equals(DEFAULT_CHAR)
或只使用DEFAULT_CHAR == control.SpecialChar
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.