Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误Nullable对象必须有一个值_C#_Asp.net - Fatal编程技术网

C# 错误Nullable对象必须有一个值

C# 错误Nullable对象必须有一个值,c#,asp.net,C#,Asp.net,好的,我正在做一个时间报告项目,只是为了熟悉asp.NETMVC5和数据库以及所有这些 我可以报告一个日期,但我想报告几个日期。在我的控制器中,我这样做是为了: string d = form["date"]; string[] dates = d.Split(' '); foreach (var date in dates) { if (!DateTime.TryP

好的,我正在做一个时间报告项目,只是为了熟悉asp.NETMVC5和数据库以及所有这些

我可以报告一个日期,但我想报告几个日期。在我的控制器中,我这样做是为了:

            string d = form["date"];
            string[] dates = d.Split(' ');

            foreach (var date in dates)
            {
                if (!DateTime.TryParse(date, out reportDate))
                {
                    ModelState.AddModelError("Date", "Felaktikt datum");
                }
它非常简单,每个日期都用空格分隔,我将日期添加到一个字符串数组中,数组中的每个日期都将执行代码。我有一个很好的工作

它对第一个日期的第一次运行一切都很好,它报告了那个时间,但在循环中的第二次,我得到了以下错误:Nullable对象必须有一个值。

代码如下:

        for (int i = 0; i < Projects.Count; i++)
        {
            reportProjects[i] = new TimeReportProject
            {
                Description = Projects[i].Description,
                FK_ProjectID = Projects[i].ProjectId,
                FK_TimeReportID = ReportId.Value,
                Hours = Projects[i].Hours.Value,
                HourRate = db.GetProjectHourRate(Projects[i].ProjectId, Date, Projects[i].Hours.Value),
                TimeReportProjectID = Guid.NewGuid()
            };
        }
这是可行的,但在它继续运行之后,我会被以下代码卡住:

        public void AddToTimeReportProjects(TimeReportProject timeReportProject)
    {
        base.AddObject("TimeReportProjects", timeReportProject);
    }
这就是错误:

System.Data.Entity.dll中发生“System.ArgumentNullException”类型的异常,但未在用户代码中处理

其他信息:值不能为空


首先,我不明白为什么它在运行第二个循环以将第二个日期添加到报告中时不起作用,第一个运行得很好,我已经调试过了,它做的一切都是一样的

首先,在
null
上调用
Value
实际上表示您知道它有一个值,否则如果发现该值为
null
,它会抛出异常。在调用
Value
之前,应始终检查
HasValue

您可以使用
Projects[i].Hours.GetValueOrDefault()
来代替所有这些,当
Hours
null
时,它将为整数生成
0


我猜在您的第二个代码示例中,
timeReportProject
null
,这显然是不允许的。

但这似乎不是所希望的,即使这会导致下一个异常,也不应该初始化对象。所以我不确定OP是否希望通过指定默认值来避免第二个异常。也许他只是想创建一个更小的数组。的确,但OP并没有问该怎么做,他已经知道了。但他问为什么会发生这种情况。当第一个循环在第一个日期etc 2015-08-11中运行时,小时数不为空,但当所有这些都完成并报告该日期后,它将在2015-08-12 etc第二次运行时,小时数将为空,所以我添加了空检查。它确实捕捉到了这一点,并再次运行,下一次小时数回到8。但如果我使用项目[I].hours.GetValueOrDefault(),第二天我将得到0小时,而不是第一天得到的8小时。然后在检索数据时出现错误。当前的代码不足以说明它的任何内容,但它确实说明了为什么最终会得到这些结果。你在哪里保存这些数据?
        public void AddToTimeReportProjects(TimeReportProject timeReportProject)
    {
        base.AddObject("TimeReportProjects", timeReportProject);
    }