我需要檢查一個泛型對象爲null或默認(T)。但我有一個問題...目前,我已經這樣做:C#:替代GenericType == null
if (typeof(T).IsValueType)
{
if(default(T).Equals(thing))
// Do something
else
// Do something else
}
else
{
if(thing == null)
// Do something
else
// Do something else
}
但是,然後我最終重複自己......我不喜歡。問題如下:
thing == null;
此處ReSharper會警告可能的值類型與'null'的比較。
thing == default(T);
這裏我得到編譯器錯誤:無法將運算符'=='應用於'T'和'T'類型的操作數。
thing.Equals(null|default(T));
thing
顯然可以爲空(這就是爲什麼我要檢查!),所以會導致NullReferenceException異常。
null|default(T).Equals(thing);
空和默認(T)是經常空,以及...
有沒有乾淨的方式來做到這一點?
但如果value是一個值類型會發生什麼? – Svish 2009-02-19 14:42:42
(value == null)將返回false。 (value.Equals(default(T))將檢查默認值 – configurator 2009-02-19 14:50:11
這隻能避免拳擊,如果有一個Equals實現類型是專門化的,而不是默認的接受一個對象,鑑於此,我認爲object.Equals(value,default(T))更容易閱讀 – 2009-02-19 15:18:51