C# 当T=Double时,从默认值(T)获取Double.NOTANUMBER,是否可能?
我需要帮助解决我申请中的一个问题。 在我的应用程序中,当我设置默认值(T)并且泛型的类型是double时,我需要使用double.NotANumber。但我得到的是“0.0”。 它们是获取我需要的值的一种方法吗???否。C# 当T=Double时,从默认值(T)获取Double.NOTANUMBER,是否可能?,c#,C#,我需要帮助解决我申请中的一个问题。 在我的应用程序中,当我设置默认值(T)并且泛型的类型是double时,我需要使用double.NotANumber。但我得到的是“0.0”。 它们是获取我需要的值的一种方法吗???否。默认值(双精度)将始终为0,您无法更改它 最接近的方法是编写一个单独的静态方法: public static T GetDefaultValue<T>() { return typeof(T) == typeof(double) ? (T)(object) d
默认值(双精度)
将始终为0,您无法更改它
最接近的方法是编写一个单独的静态方法:
public static T GetDefaultValue<T>()
{
return typeof(T) == typeof(double) ? (T)(object) double.NaN : default(T);
}
publicstatict GetDefaultValue()
{
返回typeof(T)=typeof(double)?(T)(object)double.NaN:默认值(T);
}
然后需要调用该方法,而不是使用
default(T)
。不过这很糟糕:(我不知道用T=Nullable
来思考是否有助于您在这里进行处理;然后default(T)
是null
(或者至少是null-ish)。仍然不完全是NaN
,但比0
更接近,它自然扩展到所有值类型。谢谢你的回答。Jon你的回答解决了我的问题。但我只想了解为什么在将其转换为泛型类型“T”之前将double.NaN转换为Object?有没有解释为什么我们不能更改默认值的返回值?@Wilfrid:泛型的铸造规则非常棘手。我不想声称理解所有的设计决策——只是它们是必要的。至于为什么不能更改默认值-default(t)
总是返回“零值”-即,从擦除内存到所有位的值为0。这就是创建数组的方式,等等。它既便宜又统一。