2012-08-01 54 views
0

伊夫下面的代碼:違約<T>測試一個通用的返回值

TConverted ret; 
    ret = forward.Get<TConverted>(GetForwardKey(id, convType)); 
    if (ret != default(TConverted))... // wrong here ! 

通用Get函數從緩存返回的項目。它可以是一個值類型或一個類。我想檢查返回的值是否爲空或默認值,但我認爲它應該工作的代碼不。有可能嗎?

+2

你會得到什麼錯誤? – SLaks 2012-08-01 13:03:03

回答

3

this essentially-identical question ...

爲了避免拳擊,比較仿製藥的平等與 EqualityComparer<T>.Default的最佳途徑。這方面IEquatable<T>(沒有 拳擊)以及object.Equals,並處理所有的「提升」的細微差別的所有Nullable<T> 。因此:

if(EqualityComparer<T>.Default.Equals(obj,default(T)) { 
    return obj; 
} 

這將匹配:

  • 爲類
  • 空(空)爲null Nullable<T>
  • 零/假/等其他結構

如果這對你有幫助,請提供Mark Gravell的回答(我已經找到了答案)諷刺)關於我所鏈接的問題。

+0

謝謝,抱歉錯過了答案,我提出了你的和Mark的答案。 – 2012-08-01 13:26:23