2010-07-27 46 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接近,而且它。

相关问题