4

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

4

5 回答 5

16
decimal e = d ?? 0.0;
于 2009-05-01T03:14:11.393 回答
10
decimal e;
if(d.HasValue) 
{
    e = d.Value;
}
于 2009-05-01T03:04:10.327 回答
2

您需要确定是否可以,即可为空的 d 是否有值。

if (d.HasValue) { e = d.Value; } else { /* now what */ }

另一个有趣的情况很常见,您想使用三元分配给可空值,在这种情况下,您必须强制转换以使两个分支具有相同的类型。

d = foo ? 45 : (int?)null;

注意 null 到 (int?) 的情况,以便两个分支具有相同的类型。

于 2009-05-01T03:03:59.937 回答
1
decimal e;

if (d.HasValue)
{
    e = d.Value;
}
于 2009-05-01T03:02:14.060 回答
1

我通常会这样:

decimal e = d.HasValue ? d.Value : decimal.Zero;

这里的原因是我是三元运算的粉丝,如果我TryParse()为我正在处理的类型执行失败,我通常会分配我会得到的值。因为decimal那将是decimal.Zero,因为int它也会如此0

于 2009-05-01T03:20:14.233 回答