c#:从可空类型中分配

时间:2009-05-01 03:01:00

标签: c# nullable

如果我有一个可以为空的“十进制?d”并且我想将d分配给不可为空的e,那么正确的方法是什么?

5 个答案:

答案 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,对于int0也是{{1}}。