簡體   English   中英

Char.Equals vs Object.Equals - ReSharper建議我應該使用Object.Equals。 我是不是該?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM