2010-07-27 41 views

回答

1

default(double)將始終爲0,並且沒有什麼可以改變這一點。

你能來是寫一個單獨的靜態方法最接近:

public static T GetDefaultValue<T>() 
{ 
    return typeof(T) == typeof(double) ? (T)(object) double.NaN : default(T); 
} 

你會那麼需要調用,而不是使用default(T)該方法。這是很討厭的,雖然:(

+0

感謝您的回答。您的答案解決了我的問題,但我只是想了解爲什麼在將它投射到普通類型「T」之前爲什麼要投射double.NaN到Object? – Wilfrid 2010-07-27 12:33:35

+0

並且在那裏解釋爲什麼我們不能改變默認的返回值? – Wilfrid 2010-07-27 12:34:42

+1

@Wilfrid:關於泛型的轉換規則非常棘手,我不會聲稱理解所有的設計決策 - 只是他們是必要的。至於爲什麼你不能改變默認的默認(T)總是返回「零值」 - 即你從擦除內存到所有位爲0的值。這就是數組的創建方式等。它便宜並統一。 – 2010-07-28 09:23:40

2

我不知道如果在T=Nullable<double>思維將幫助你處理在這裏;然後default(T)null(或者至少,空ISH)還是不太NaN,但比0接近,而且它。

相關問題