使用List.Add方法时,C# - Class.models.modelname.list.get返回了空值

4
我创建了一个类:
public partial class SvcCodes
{
    public List<SvcCodeReport> Report { get; set; }
    public List<SvcCodesCheck> TestList { get; set; }
}

它使用这个类:
public partial class SvcCodeReport
{
    public List<Dictionary<string, object>> ProgResults { get; set; }
    public IEnumerable<ExtraData> ExtraData { get; set; }
}

在控制器中,数据从两个来源提取并分配给SvcCodeReport类:

var model = new SvcCodeReport()
{
  ProgResults = tasks,
  ExtraData = _context.ExtraData.Where(h => h.ServiceCode == Int32.Parse(id)
};

然后将模型变量添加到 Report 类中:
check.Report.Add(model);

但是当我运行程序时,出现了一个空对象错误,并且有一行提示:

LRProgReport.Models.SvcCodes.Report.get returned null

这个错误是在添加之前还是之后报告Report为空?

如果是在添加之前报错,为什么会出现这个问题? 如果是在添加之后报错,为什么模型变量没有被添加到列表中?

2个回答

9

首先需要初始化Report列表,可以在SvcCodes构造函数中完成;

public partial class SvcCodes
{
    public List<SvcCodeReport> Report { get; set; }
    public List<SvcCodesCheck> TestList { get; set; }

    public SvcCodes()
    {
        Report = new List<SvcCodeReport>();
    }
}

太好了!这就是缺失的部分。谢谢! - Mighty Ferengi

1
我猜测你可能遇到了Linq的延迟执行模型问题。当你使用x.Where()等语句时,代码并不会立即运行,只有在最终强制使用数据时才会运行。请尝试使用以下方法。
var model = new SvcCodeReport()
{
  ProgResults = tasks,
  ExtraData = _context.ExtraData.Where(h => h.ServiceCode == Int32.Parse(id).ToList();
};

这将强制评估_context.ExtraData。

这是正确的,但不是 OP 的问题。 - Markiian Benovskyi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接