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
或装箱的doubleNullable
与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的答案不同。