Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当T=Double时,从默认值(T)获取Double.NOTANUMBER,是否可能?_C# - Fatal编程技术网

C# 当T=Double时,从默认值(T)获取Double.NOTANUMBER,是否可能?

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

我需要帮助解决我申请中的一个问题。 在我的应用程序中,当我设置默认值(T)并且泛型的类型是double时,我需要使用double.NotANumber。但我得到的是“0.0”。 它们是获取我需要的值的一种方法吗???

否。
默认值(双精度)
将始终为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。这就是创建数组的方式,等等。它既便宜又统一。