这段代码会破坏吗?

时间:2009-04-29 20:14:21

标签: c# nullable

业务对象返回short?数据类型。

如何将此值转换为变量?

short? myShort = SomeBusinessObject.UserBlah;

这是对的吗?如果它为空,它会破坏吗?

8 个答案:

答案 0 :(得分:4)

这是对的。你只需要担心,如果你将myShort分配给一个不可空的短片,在这种情况下你必须检查HasValue,如下所示:

short s = myShort.HasValue ? myShort.Value : (short) 0; // or some other short value

答案 1 :(得分:4)

要在检查myShort.HasValue后使用myShort.Value将其变为变量

答案 2 :(得分:2)

您是否真的试图防止SomeBusinessObject为空?如果是这样,可空类型将无法帮助您。您仍需要检查SomeBusinessObject是否为空。

我假设是这种情况,因为如果UserBlah返回一个short,那么它将永远不会为null(因为short不是可空类型)。

答案 3 :(得分:2)

不要忘记空合并运算符。

short myShort = SomeBusinessObject.UserBlah ?? 0;

如果SomeBusinessObject.UserBlah为null,它只是将值传递给??所以你可以默认它。

答案 4 :(得分:1)

是的,这是正确的。

答案 5 :(得分:1)

如果业务对象返回myShort,则

null将为null

您无法直接将myShort作为值类型引用,因此可以。

您可以使用myShort.HasValue查看myShort是否null

使用myShort.Value获取值。如果没有定义值,它将抛出异常。

您可以使用GetValueOrDefault()并传入默认值以获取值,即使未定义任何值(null)。如果可空类型为null,则此函数返回您传入的值。

答案 6 :(得分:1)

如果UserBlah可隐式转换为Nullable<Int16>并且设置为null,则

myShort将仅为null,在这种情况下,除非您尝试访问myShort.Value的成员,否则它不会中断

你也可以这样做:

short defaultValue = 0;
short myShort      = SomeBusinessObject.UserBlah ?? defaultValue;

答案 7 :(得分:0)