首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >访问可为空的DateTime变量上的.HasValue时出错

访问可为空的DateTime变量上的.HasValue时出错
EN

Stack Overflow用户
提问于 2018-06-28 17:33:31
回答 1查看 261关注 0票数 0

当访问一个可以为空的DateTime?变量的.HasValue属性时(当它没有值的时候),我得到了以下错误。

它在我的开发机器(Win 10,VS 2017)上运行良好,但在由TFSv15.117构建定义(设置为使用VS 2017版本)构建并发布到客户端服务器(Windows server 2012 R2标准版)后,抛出以下错误:

NullReferenceException:未设置对象变量或具有块变量。Microsoft.VisualBasic.CompilerServices.Container..ctor(Object实例) +1479606

Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object实例,类型类型,字符串MemberName,Object[]参数,String[] ArgumentNames,Type[] TypeArguments,Boolean[] CopyBack) +250

为什么myDateTimeVar.HasValue可以在一个系统上工作,但在另一个系统上却像这样失败?

编辑:

Dim testDate1 As DateTime? = Nothing

Dim testDate2 As DateTime? = DateTime.Now

Dim testDate3 As DateTime? = DateTime.MinValue

Dim testDate4 As DateTime?

Debug.WriteLine(testDate1.HasValue) 'False

Debug.WriteLine(testDate2.HasValue) 'True

Debug.WriteLine(testDate3.HasValue) 'True

Debug.WriteLine(testDate4.HasValue) 'False

基于对J的回答的评论中的讨论,这段代码在本地项目中运行得很好。您认为Option Strict在不同配置/环境中的应用会有所不同吗?(尽管TFS Build Def设置为使用Debug)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-28 18:18:20

我刚刚测试了这段代码,并看到了与您描述的相同的行为:

代码语言:javascript
复制
Option Strict Off

Module Module1

    Sub Main()
        Dim nullableDate As Date? = Nothing
        Dim boxedNullableDate As Object = nullableDate

        Console.WriteLine(boxedNullableDate.HasValue)
        Console.ReadLine()
    End Sub

End Module

异常的原因可能是,装箱没有值的Date?会给出一个NothingObject引用,而试图访问Nothing的任何成员都会抛出NullReferenceException

这基本上意味着使用可为空的值类型的后期绑定将不起作用。

编辑:

有趣的是,我刚刚将代码更改为:

代码语言:javascript
复制
Option Strict Off

Module Module1

    Sub Main()
        Dim nullableDate As Date? = Date.Now
        Dim boxedNullableDate As Object = nullableDate

        Console.WriteLine(boxedNullableDate.HasValue)
        Console.ReadLine()
    End Sub

End Module

现在我收到了一个MissingMemberException,其中包含以下消息:

找不到类型为'Date‘的

公共成员'HasValue’。

似乎装箱一个可空的值类型并没有保留原始变量是可空的知识。如果Object变量为Nothing,则调试器仅将其识别为Object,否则将其识别为Object {Date}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51079413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档