我想使该变量可以赋空值。但是给'?似乎不起作用。请帮助我找到出路。我是新来的。谢谢
Public Class T3DObject
Public V(7) As Point
Public E(5) As Surface
End Class
Public Structure ListElmt3DObject
Public first As Elmt3DObject
End Structure
Public Class Elmt3DObject
Public child As ListElmt3DObject?
Public nxt As Elmt3DObject? 'this line is error
Public obj As T3DObject? 'this also error
End Class
还有其他方法吗?请分享。谢谢!!
这是导致错误的代码:NullReferenceException
Sub Process(ByRef E As Elmt3DObject)
While E.child IsNot Nothing Or E.nxt IsNot Nothing
'code
End While
End Sub
答案 0 :(得分:2)
我知道这是一个VB.Net问题,但要了解这一点,也了解C#的工作原理也很有帮助。在C#中,有一个[
{
"a":1
"b":["a","b"]
}
...
]
的概念。您可以将"a" "b"
1 a
1 b
的值分配给引用类型(即:VB.Net类),但不能将null
的值分配给引用类型(即:VB.Net结构)。值类型(结构)变量总是具有某种值。
回到VB.Net,我们有了null
关键字。但是,null
不是C#的null的直接类似物。更接近匹配C#Nothing
表达式。 VB.Net允许您将Nothing
分配给值类型。只是在执行操作时,您会获得该类型的默认值。
default(T)
类型和相关的语言语法功能旨在允许值类型使用新的空语义 。这不适用于引用类型,因为引用类型已经具有null 的概念。
当我在这里的时候,我也看到了:
Nothing
Nullable(Of T)
是引用类型(类)。传递引用类型Sub Process(ByRef E As Elmt3DObject)
几乎总是一个错误。您仍然需要Elmt3DObject
,因为为类传递ByRef
仍会传递引用。它会生成参考的副本,但仍只是参考。