使用泛型类型构造函数时,Null (?) 运算符返回不正确的值。网络

2023-12-22

使用通用类型和空运算符时,我遇到一些奇怪的行为。为什么 obj2.CurrentDate 返回的日期值在使用时看起来不正确? (简写)。如果我在属性中长期使用 null 运算符 (if),那么它会返回正确的预期值。我以为?相当于 if(表达式, returnIfTrue, returnIfFalse)。

此外,如果删除泛型类型构造函数,则 null 运算符将按预期工作。为什么是这样?

Return If(CurrentObject1 IsNot Nothing, CurrentObject1.MyDate, Nothing) -- Long Hand Returns correct value

Return CurrentObject1?.MyDate --Short Hande - Returns incorrect value

第一个控制台应用程序 - 使用通用类型构造函数,CurrentDate 不是预期的。

Module Module1
    Sub Main()
        Dim obj1 As New MyObject1 With {.MyDate = CDate("2017-11-13T14:25:00Z")}
        Dim obj2 As New MyObject2(Of MyObject1)(obj1)

        Console.WriteLine(obj1.MyDate)
        Console.WriteLine(obj2.CurrentDate)

        Console.ReadKey()
    End Sub
End Module

Public MustInherit Class MyBaseObject1
   Property MyDate As Date
End Class

Public Class MyObject1
    Inherits MyBaseObject1
End Class

Public Class MyObject2(Of MyObjectType As {MyBaseObject1, New})
    Public Sub New(obj As MyObjectType)
        m_CurrentObject1 = obj
    End Sub

    Private m_CurrentObject1 As MyObjectType = Nothing
    Public ReadOnly Property CurrentObject1 As MyObjectType
        Get
            Return m_CurrentObject1
        End Get
    End Property
    Public ReadOnly Property CurrentDate As Date?
        Get
            Return CurrentObject1?.MyDate
        End Get
    End Property
End Class

控制台应用程序 1 的输出

2017 年 11 月 13 日 8:25:00 上午

2/24/0010 4:56:53 上午

第二个控制台应用程序 - 没有泛型类型构造函数。按预期工作

Module Module1
    Sub Main()
        Dim obj1 As New MyObject1 With {.MyDate = CDate("2017-11-13T14:25:00Z")}
        Dim obj2 As New MyObject2(obj1)

        Console.WriteLine(obj1.MyDate)
        Console.WriteLine(obj2.CurrentDate)

        Console.ReadKey()
    End Sub
End Module

Public MustInherit Class MyBaseObject1
    Property MyDate As Date
End Class

Public Class MyObject1
    Inherits MyBaseObject1
End Class

Public Class MyObject2
    Public Sub New(obj As MyBaseObject1)
        m_CurrentObject1 = obj
    End Sub

    Private m_CurrentObject1 As MyBaseObject1 = Nothing
    Public ReadOnly Property CurrentObject1 As MyBaseObject1
        Get
            Return m_CurrentObject1
        End Get
    End Property
    Public ReadOnly Property CurrentDate As Date?
        Get
            Return CurrentObject1?.MyDate
        End Get
    End Property

End Class

第二个控制台应用程序的输出

2017 年 11 月 13 日 8:25:00 上午

2017 年 11 月 13 日 8:25:00 上午


是的,这看起来像是一个编译器错误。很快就会修复它。同时您可以使用以下解决方法: DirectCast(CurrentObject1, MyBaseObject1)?.MyDate

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用泛型类型构造函数时,Null (?) 运算符返回不正确的值。网络 的相关文章

随机推荐

  • 如何更新具有特定列名的所有表

    我正在尝试更新以 agg 和column name userid 等字符串开头的所有表 但我在网上没有看到任何此类示例 即使我能够找到选择具有特定列名称和表名称的所有表的选项 我也需要执行相同的操作来更新这些表 如下所示 update TA
  • T SQL 分组时选择最小和最大行

    假设我有一个包含很多行的表 如下所示 ID Range Range begining Profit 1 100 150 100 20 2 200 250 200 40 2 3 100 150 100 100 4 450 500 450 90
  • 使用 boost::numpy::ndarray 时出现分段错误

    当我试图通过时 我发现了一个奇怪的段错误boost numpy ndarray作为一个论点 include
  • 从 lxml 获取内部文本

    lxml html fromstring 坚持将所有内容包装在标签中 p默认 从这个标签树来看 p this is b the b good stuff p p 我想提取字符串 this is b the b good stuff 我该怎么
  • 在 Javascript (Meteor) 中将字符串转换为 Mongo ObjectID

    我有一个 Meteor 应用程序 最初我使用 id在我的模板中命名列表项时 我的集合中每条记录的字段 当得到 id字段 我将其转换为字符串以在模板中使用 现在我想更新 Mongo 中的这些记录并传递 id回到一个Meteor method
  • 获取本地文件的内容而不上传[重复]

    这个问题在这里已经有答案了 我正在编写一个离线网络应用程序 允许用户选择本地文件 修改它 然后也在本地保存副本 是否可以在没有任何服务器的情况下 我可以上传文件并返回其base64 但它不是离线的 应用程序只需要在 Google Chrom
  • 使用 Nginx 在单个域上运行多个 React 应用程序

    谁能推荐一个最佳实践 nginx 配置来在单个域上运行多个 React 应用程序 这些应用程序将从不同的根目录提供服务 因此 app1 和 app2 在 www domain com 上运行并获得服务 www domain com app1
  • 如何查看查询执行成功与否?

    我正在使用 codeigniter 2 0 2 这是来自它的用户指南 data array title gt title name gt name date gt date this gt db gt where id id this gt
  • SQL 中的循环行

    我正在寻找类似的输出 最近 日期 评论 第二个最近 日期 评论 Example Book Comments BookA 27 03 13 comment1 21 03 13 comment2 21 03 13 uhuuuu and so o
  • 基于数量的价格计算器[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试创建一个简单的脚本来添加到我的 html 网站 我需要它根据用户输入的数量计算价格 例如 1 1000 的值将乘以 1 50 并
  • Flex 4 组显示效果/隐藏效果

    我有一个组 我想在显示和隐藏时执行擦除效果
  • Drupal 7 在“首次加载”时太慢

    我希望有人能帮助我解决这个 Drupal 7 问题 我注意到 当我 第一次 输入网站地址时 加载时间非常慢 开始加载文件和显示内容大约需要 20 平均 秒 好像有一些延迟 然而 在那段时间之后 速度非常快 一切都很好 页面加载后 我们可以快
  • 在 NLTK 解析器中使用整数/日期作为终端

    我正在尝试使用 NLTK 中的 Earley 解析器来解析句子 例如 如果日期早于 12 21 2010 则序列号 10 为此 我尝试编写一个 CFG 但问题是我需要使用日期和整数的通用格式作为终端 而不是特定值 有没有什么方法可以将生产规
  • 列出SD卡中的所有图像

    您好 我正在开发 Android Gallery 应用程序 我正在从 SD 卡中的文件夹中获取图像并将其显示在网格视图上 如下所示 public static ArrayList
  • Linq - 如何在变量中存储“where条件”

    是否可以将此 linq 语句中的Where条件存储在变量中 Func
  • 使用 z-index 覆盖 DIV

    我试图在整个页面上覆盖一个 div 以显示弹出窗口 问题是 它不会覆盖整个页面 这是代码的近似值 div div style width 100 height 100 Overlay div Contents of container 1
  • angularjs 按顺序链 http post

    在我的应用程序中 我将数据存储在本地存储中并在后台触发异步 http post 成功发布后 发布的数据将从本地存储中删除 当 http post 正在进行时 可能会有更多数据添加到本地存储中 因此我需要将 post 排队并按顺序处理它 因为
  • 在 ABPeoplePickerNavigationController 上取消选择RowAtIndexPath

    我在我的应用程序中将 ABPeoplePickerNavigationController 显示为选项卡 用户单击姓名 然后单击电子邮件地址 然后我对电子邮件地址执行某些操作 之后 我希望他们选择的人和财产淡出 不突出显示 在普通表中 我会
  • getOutputStream() 上的设备上“没有到主机的路由” - 无线连接

    private String urlPost http 192 168 1 66 8080 DataCollectionServlet Override protected void doWakefulWork Intent intent
  • 使用泛型类型构造函数时,Null (?) 运算符返回不正确的值。网络

    使用通用类型和空运算符时 我遇到一些奇怪的行为 为什么 obj2 CurrentDate 返回的日期值在使用时看起来不正确 简写 如果我在属性中长期使用 null 运算符 if 那么它会返回正确的预期值 我以为 相当于 if 表达式 ret