如何解决为什么我不能将此变量分配为可空值? Visual Basic
我想使该变量可以赋空值。但是给'?似乎不起作用。请帮助我找到出路。我是新来的。谢谢
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
解决方法
我知道这是一个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
仍会传递引用。它会生成参考的副本,但仍只是参考。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。