如何创建“=”运算符来检查结构类型是否为 null

How to create an "=" operator to check if a Structure type is null

提问人:John89 提问时间:11/17/2023 最后编辑:John89 更新时间:11/18/2023 访问量:50

问:

我以前从来没有遇到过创建操作员的问题,但这次我被难住了。我的目标是能够使用运算符来检查我的结构类型是否为 null。例:。我尝试了几种不同的失败方法,但没有成功找到任何关于我问题的文档。我不确定如何将对象标识符类型设置为空标识符:=If myStruct = Nothing Then

PhoneNumber 结构中的运算符:

Public Shared Operator =(number As PhoneNumber, null As Nothing) As Boolean ' <== Error for type "Nothing": Keyword does not name a type.
    Return IsDBNull(number)
End Operator

Public Shared Operator <>(number As PhoneNumber, null As Nothing) As Boolean ' <== Error for type "Nothing": Keyword does not name a type.
    Return Not IsDBNull(number)
End Operator

检查结构是否为 null:

Friend Sub Foo(num as PhoneNumber)
   If myStruct = Nothing Then
      ' Do something
   Else
      ' Do something else
   End If
End Sub

有没有可能做我想做的事情?如果是这样,你们能给我指出解决这个问题的方向吗?我更愿意了解这一切是如何工作的,但我很乐意接受解决方案/答案作为替代方案。

vb.net 运营商

评论

2赞 Jon Roberts 11/17/2023
对不起,错过了。如果 PhoneNumber 是 Structure,则它是值类型,而不是引用类型,因此不能为 Null/Nothing。也许为默认值为 False 的“IsInitialised”添加一个布尔属性,并在“创建”(分配一个值)时设置它,然后测试 IsInitialised 而不是 = Nothing
1赞 Jon Roberts 11/17/2023
此外,您的操作员会测试 PhoneNumber(结构)是否为 DBNull。我不相信一个结构可以是 DBNull,尽管它的一个或多个属性可以。也许发布您的电话号码结构的定义以及您如何使用它以获得更多帮助
3赞 Craig 11/17/2023
@JonRoberts如果它真的是,那么它就不能为空。 将等效于默认初始化的结构。StructureNothing
1赞 Craig 11/17/2023
我记得,工作方式是你得到一个访问器,对象可以是对象,也可以是你在列中期望的类型。(它必须是这种方式,而不是因为值类型不可为空。不会有任何你成为.不幸的是,据我所知,可为 null 的值类型直到 2.0 才进入 .NET,因此 1.0 数据库设计不会像在现代 .NET 中预期的那样执行 null。DBNullObjectDBNullNothingPhoneNumberDBNull
3赞 jmcilhinney 11/18/2023
您确实意识到存在可为 null 的值类型,对吗?无论您在哪里使用,您都可以使用或简称。然后,您可以使用该属性来查看变量或其他任何内容是否具有值,如果是,则可以从该属性中获取值。你不需要你正在做的任何事情。SomeValueTypeNullable(Of SomeValueType)SomeValueType?HasValueTrueValue

答:

0赞 Jon Roberts 11/18/2023 #1

归功于 @jmcilhinney 的评论,这段代码对我有用,没有错误:

Private Structure TelephoneNo
  Public AreaCode As String
  Public telno As String
End Structure

Private Sub foo(num As Nullable(Of TelephoneNo))
  If num Is Nothing Then
     ' Do something
  Else
     ' Do something else
  End If
End Sub

评论

1赞 Craig 11/18/2023
您可以缩写为 .Nullable(Of TelephoneNo)TelephoneNo?