首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# DateTime提交方法

C# DateTime提交方法
EN

Stack Overflow用户
提问于 2016-11-24 22:50:52
回答 3查看 255关注 0票数 0

当我点击提交按钮时没有输入任何日期或时间,有人能帮我弄清楚为什么我会收到这个错误消息吗?

类型'System.InvalidOperationException‘的异常发生在mscorlib.dll中,但未在用户代码中处理附加信息:可空对象必须具有一个值。

代码语言:javascript
运行
复制
 int result1 = this.startDate.SelectedDate.Value.Date.CompareTo(DateTime.Now.Date);
        int result2 = this.endDate.SelectedDate.Value.Date.CompareTo(this.startDate.SelectedDate.Value.Date);

        if (result1 >= 0 && result2 > 0)
        {
            //To Do navigate to sprint dashboard
            // var userProjects = new UserStory();
            //var sprintDashboardPage = new SprintDashboardPage(usersProjects);
            //var mainWindow = this.GetWindow() as MainWindow;
            //mainWindow.MainFrame.Navigate(sprintDashboardPage);
            this.ErrorMessage = "Date is VALID";
            this.CloseWindow();
        }
        else
        {
            this.ErrorMessage = "Choose Valid Date";
        }
EN

回答 3

Stack Overflow用户

发布于 2016-11-24 23:12:23

this.startDate.SelectedDateNullable<DateTime>。这意味着您必须检查this.startDate.SelectedDate在使用它之前是否有一个赋值:

代码语言:javascript
运行
复制
if(this.startDate.SelectedDate.HasValue) {
    this.startDate.SelectedDate.Value.Date.CompareTo(DateTime.Now.Date);
}

以下内容也将发挥作用:

代码语言:javascript
运行
复制
if(this.startDate.SelectedDate != null) {
    this.startDate.SelectedDate.Value.Date.CompareTo(DateTime.Now.Date);
}

在访问this.endDate.SelectedDate时也是如此。

在C#中,DateTime是值类型,这意味着它必须始终具有分配给它的值。换句话说,它不能设置为null。它的默认值是DateTime.MinValueInt32 (或int)是值类型的另一个示例,其默认值为0。

为了使值类型支持为空,可以使用Nullable<>包装它。这样做意味着您必须在访问该值之前显式检查是否已分配了一个值,否则将抛出一个InvalidOperationException。

WPF中的DateTime选择器控件返回一个Nullable<DateTime>对象,这样您就可以知道用户是否在控件中实际选择了一个值,因为它将被设置为一个非空值。

票数 2
EN

Stack Overflow用户

发布于 2016-11-24 22:58:13

您在没有首先检查其Value属性返回true的情况下调用Nullable<>上的HasValue属性。

票数 1
EN

Stack Overflow用户

发布于 2016-11-24 22:59:54

异常将抛出在.Value属性的DateTime? (可空DateTime)中,因为它是返回DateTime所必需的,但不能返回,因为没有要返回的DateTime

访问Nullable类型的.Value属性而不检查它是个坏主意。您应该考虑添加空检查代码。(例如具有HasValue属性)

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

https://stackoverflow.com/questions/40795471

复制
相关文章

相似问题

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