C# 列表内的列表错误为';对象引用未设置为对象的实例;

C# 列表内的列表错误为';对象引用未设置为对象的实例;,c#,list,asp.net-core,C#,List,Asp.net Core,我有一个七个日期的列表,一周中的每一天一个,每个日期都有一个当天发生的事件列表,一天中不可能有任何事件日期是一个由7个日期时间天组成的数组。我的代码如下所示: var-dateData=新列表(新列表[7]); 对于(int i=0;it.Date.Equals(日期[i].ToString(“yyyy-MM-dd”)) .ToList()); } 然而,我得到了以下信息和错误: 对象引用未设置为对象的实例。在dateData[i] new List[7]创建一个由List对象组成的7

我有一个七个日期的列表,一周中的每一天一个,每个日期都有一个当天发生的事件列表,一天中不可能有任何事件<代码>日期是一个由7个
日期时间
天组成的数组。我的代码如下所示:

var-dateData=新列表(新列表[7]);
对于(int i=0;i<7;i++)
{            
dateData[i].AddRange(_context.Timelineinfo
其中(t=>t.Date.Equals(日期[i].ToString(“yyyy-MM-dd”))
.ToList());
}    
然而,我得到了以下信息和错误:

对象引用未设置为对象的实例。
dateData[i]

new List[7]
创建一个由
List
对象组成的7元素数组,该数组不包含任何值。它相当于以下表达式:

new List<Timelineinfo>[]
{
    null,
    null,
    null,
    null,
    null,
    null,
    null,
}
新列表[]
{
无效的
无效的
无效的
无效的
无效的
无效的
无效的
}
因此,这将为该类型创建一个包含7个元素的数组,但每个数组元素的值尚未初始化。所以你只分配房间,但没有价值

将此数组传递给构造函数
newlist(array)
只会将那些未初始化的数组元素复制到正在创建的新列表中。因此,该列表还将包含未初始化的列表元素

为了能够使用这些元素,您必须首先初始化它们。由于您已经在项目上循环,因此可以在循环体中执行此操作:

var dateData = new List<List<Timelineinfo>>(new List<Timelineinfo>[7]);
for (int i = 0; i < 7; i++)
{
    dateData[i] = new List<Timelineinfo>();

    dateData[i].AddRange(_context.Timelineinfo
        .Where(t => t.Date.Equals(dates[i].ToString("yyyy-MM-dd")))
        .ToList());
}
var-dateData=新列表(新列表[7]);
对于(int i=0;i<7;i++)
{
dateData[i]=新列表();
dateData[i].AddRange(_context.Timelineinfo
其中(t=>t.Date.Equals(日期[i].ToString(“yyyy-MM-dd”))
.ToList());
}
在您的特定情况下,您将创建一个列表,然后直接向该列表添加另一个列表的元素,因此您也可以直接将该列表分配给列表元素:

for (int i = 0; i < 7; i++)
{
    dateData[i] = _context.Timelineinfo
        .Where(t => t.Date.Equals(dates[i].ToString("yyyy-MM-dd")))
        .ToList();
}
for(int i=0;i<7;i++)
{
dateData[i]=\u context.Timelineinfo
其中(t=>t.Date.Equals(日期[i].ToString(“yyyy-MM-dd”))
.ToList();
}
新建列表[7]
创建一个由
列表
对象组成的7元素数组,该数组不包含任何值。它相当于以下表达式:

new List<Timelineinfo>[]
{
    null,
    null,
    null,
    null,
    null,
    null,
    null,
}
新列表[]
{
无效的
无效的
无效的
无效的
无效的
无效的
无效的
}
因此,这将为该类型创建一个包含7个元素的数组,但每个数组元素的值尚未初始化。所以你只分配房间,但没有价值

将此数组传递给构造函数
newlist(array)
只会将那些未初始化的数组元素复制到正在创建的新列表中。因此,该列表还将包含未初始化的列表元素

为了能够使用这些元素,您必须首先初始化它们。由于您已经在项目上循环,因此可以在循环体中执行此操作:

var dateData = new List<List<Timelineinfo>>(new List<Timelineinfo>[7]);
for (int i = 0; i < 7; i++)
{
    dateData[i] = new List<Timelineinfo>();

    dateData[i].AddRange(_context.Timelineinfo
        .Where(t => t.Date.Equals(dates[i].ToString("yyyy-MM-dd")))
        .ToList());
}
var-dateData=新列表(新列表[7]);
对于(int i=0;i<7;i++)
{
dateData[i]=新列表();
dateData[i].AddRange(_context.Timelineinfo
其中(t=>t.Date.Equals(日期[i].ToString(“yyyy-MM-dd”))
.ToList());
}
在您的特定情况下,您将创建一个列表,然后直接向该列表添加另一个列表的元素,因此您也可以直接将该列表分配给列表元素:

for (int i = 0; i < 7; i++)
{
    dateData[i] = _context.Timelineinfo
        .Where(t => t.Date.Equals(dates[i].ToString("yyyy-MM-dd")))
        .ToList();
}
for(int i=0;i<7;i++)
{
dateData[i]=\u context.Timelineinfo
其中(t=>t.Date.Equals(日期[i].ToString(“yyyy-MM-dd”))
.ToList();
}

您需要添加
dateData[i]=new List()在linq之前。

您需要添加
dateData[i]=new List()临刑前。

感谢您提供了如此全面和有益的回答!我照你说的做了,效果很好。谢谢你这么彻底和有用的回答!我照你说的做了,结果成功了。