C# 值类型的对象也是可为空的值类型吗?

C# 值类型的对象也是可为空的值类型吗?,c#,ivalueconverter,C#,Ivalueconverter,我看到一些这样的代码 if(value == null || !(value is double || value is double?)) { return value; } 如果value为double为true,则value为double?也应该为true,因此我可以将代码更改为 if(value == null || !(value is double?)) { return value; } 假设值是对象,则可以将代码更改为: if (value == null |

我看到一些这样的代码

if(value == null || !(value is double || value is double?))
{
    return value;
}
如果value为double为true,则value为double?也应该为true,因此我可以将代码更改为

if(value == null || !(value is double?))
{
    return value;
}

假设
对象
,则可以将代码更改为:

if (value == null || !(value is double))
{
   return value;
}

如果
value
是一个装箱的
double?
,则它将始终是
null
或装箱的
double

Nullable
double
的类型不同,但其nullDouble.value属性是一个double。您包含的代码似乎表明它可以处理或

请记住,
double?
实际上是可为空的
,您可以使用
GetType
查看可为空数据类型上的原始值类型。因此,记住同样的测试:

if (value == null || value.GetType() != typeof(double))
{
    return value;
}
自:

double           A = 1;  // A.GetType() = System.Double
double?          B = 1;  // B.GetType() = System.Double
Nullable<double> C = 1;  // C.GetType() = System.Double
双A=1;//A.GetType()=系统.Double
双重的B=1;//B.GetType()=系统.Double
可为空的C=1;//C.GetType()=系统.Double

所有假设第一个条件(
value==null
)短路测试,结果相同。

double?
只是
Nullable
的语法糖,因此
double!=可空的(我知道)。你到底在问什么?这有点不清楚…什么是方法签名?它是否应该返回一个
double?
double
?如果您获取一个
double?
并将其装箱(即:将其存储在
对象中
),则会发生以下两种情况之一。1)
double?
null
,在这种情况下
对象将为
null
;或者2)
double?
不是
null
,在这种情况下,
对象将包含一个装箱的
double
,并且
obj是double
将是
真的
。另请参见的备注中的“装箱和拆箱”,因此,这个问题的答案也与@Richard的答案不同。