2009-04-29 116 views
0

业务对象正在返回short?数据类型。这段代码会破坏吗?

我该如何将这个值变成一个变量?

short? myShort = SomeBusinessObject.UserBlah; 

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

+0

我认为你需要澄清你认为可能是空的。许多答案正在对UserBlah返回的内容做出假设。我的猜测(因此我的答案)是,你试图防止SomeBusinessObject为空。然而,这是一个猜测,更多的信息会很好。 – 2009-04-29 20:22:30

回答

1

是的,这是正确的。

2

你实际上是否试图防止SomeBusinessObject为空?如果是这样,可为空的类型将不会帮助你。您仍然需要检查您的SomeBusinessObject是否为空。

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

1

myShort如果业务对象返回null将为null

您不能直接引用myShort作为值类型,所以这没问题。

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

使用myShort.Value来获得该值。如果没有定义值,它会抛出异常。

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

1

myShort只会为空,如果UserBlah隐式转换为Nullable<Int16>,并将其设置为null,在这种情况下也不会断裂,除非您尝试访问的myShort.Value成员。

你也可以这样做:

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

这是正确的。您只需如果你分配到myShort一个不可为空的短,在这种情况下,你必须检查的HasValue,像这样担心:

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

GetValueOrDefault() – Nick 2009-04-29 20:21:45

4

为了得到它变成一个变量使用myShort.Value检查myShort后.HasValue

2

不要忘了空合并运算符。

short myShort = SomeBusinessObject.UserBlah ?? 0; 

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