我认为我遗漏了一些关于可空类型的基本内容。希望这个例子能够开辟新的理解,但至少,也许我们可以让这一件事能正常运作。
在课堂(对话形式)中,我声明:
Property ProductStructureHeaderKey As Int32?
在另一个类中,我声明该对话框的一个实例,并尝试使用此行设置该属性:
dr.ProductStructureHeaderKey = If(parentRow.Cells(1).Value Is Nothing, Nothing, Int32.Parse(parentRow.Cells(1).Value))
当该行为属性赋予Nothing时,该属性等于0.(然后,当我希望它传递NULL时,它将0传递给DB。)
这不是我的期望,我不断寻找代码(SO,MSDN等),看起来我做得对,但显然,我不是。那么,朋友们,我做错了什么?如何使用Nullable类型来满足我的需求?
答案 0 :(得分:2)
这是C#和VB.NET之间的差异之一。在VB.NET中,Nothing
不仅意味着null
,还意味着default
。因此,您要将默认值Int32
分配给属性为0.这是由If
-operator引起的,该Why is there a difference in checking null against a value in VB.NET and C#?必须从两个值中推断出类型而不是要分配的属性。
而是使用If...Else
:
If parentRow.Cells(1).Value Is Nothing Then
dr.ProductStructureHeaderKey = Nothing ' Now it's not 0 but Nothing
Else
dr.ProductStructureHeaderKey = Int32.Parse(parentRow.Cells(1).Value)
End If
或使用new Nullable(Of Int32)
:
dr.ProductStructureHeaderKey = If(parentRow.Cells(1).Value Is Nothing, new Nullable(Of Int32), Int32.Parse(parentRow.Cells(1).Value))
进一步阅读:{{3}}