如果我有一个可以为空的“十进制?d”并且我想将d分配给不可为空的e,那么正确的方法是什么?
答案 0 :(得分:16)
decimal e = d ?? 0.0;
答案 1 :(得分:10)
decimal e;
if(d.HasValue)
{
e = d.Value;
}
答案 2 :(得分:2)
你需要确定你是否可以,即可以为空的d是否有值。
if (d.HasValue) { e = d.Value; } else { /* now what */ }
另一个有趣的案例出现在你想要使用三元组分配给可空的地方,在这种情况下你必须进行强制转换以使两个分支具有相同的类型。
d = foo ? 45 : (int?)null;
注意null为(int?)的情况,以便两个分支具有相同的类型。
答案 3 :(得分:1)
decimal e;
if (d.HasValue)
{
e = d.Value;
}
答案 4 :(得分:1)
我通常会这样:
decimal e = d.HasValue ? d.Value : decimal.Zero;
这里的原因是我是三元操作的粉丝,如果我为我正在处理的类型执行了失败的TryParse()
,我通常会分配我得到的值。对于decimal
decimal.Zero
,对于int
,0
也是{{1}}。