c#初始化器空指针
本文关键字:空指针 初始化 | 更新日期: 2023-09-27 18:07:30
正在做一些c#基础的功课。我得到一个空指针在这一行,不能找出是什么原因造成的:
List<Project> projecten = new List<Project>{
new Project {
name = "project a",
deelnemers =
{
new Person { name = "Ed" },
new Person { name = "Mike" },
}
},
new Project {
name = "project b",
deelnemers = {
new Person {name = "Max" },
new Person {name = "Peter" },
}
}
};
person和project类的定义是正确的,我认为:
public class Project
{
public string name { get; set; }
public List<Person> deelnemers {get; set;}
}
public class Person
{
public string name { set; get; }
}
这可能是什么愚蠢的事情,但我没有看到它。
完整的文件如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
// Maak een collection mbv initializers van minimaal 3 projecten met meerdere projectleden
List<Project> projecten = new List<Project>{
new Project {
name = "project a",
deelnemers =
{
new Person { name = "Xanvier" },
new Person { name = "Jantje" },
}
},
new Project {
name = "project b",
deelnemers = {
new Person {name = "Pietje" },
new Person {name = "Keesje" },
}
}
};
List<Int16> p = new List<Int16> { 1,2,3 };
//var projectje = new Project{ name = "project a" };
}
}
public class Project
{
public string name { get; set; }
public List<Person> deelnemers {get; set;}
}
public class Person
{
public string name { get; set; }
}
}
这部分是一个集合初始化器:
deelnemers =
{
new Person { name = "Ed" },
new Person { name = "Mike" },
}
这可能是c#中最令人困惑的语法形式之一。它不初始化您的列表。只调用Add
。您还需要初始化List:
deelnemers = new List<Person> {
new Person { name = "Xanvier"},
//
}
或者,您可以在Project
的构造函数中初始化List。这样,您的原始代码将按预期工作。
解决方案是,就像Dennis_E在评论中说的那样:deelnemers = { new Person ... }
将编译。问题是,它不会初始化列表。它只会调用Add。你需要输入:
deelnemers = new List<Person> { ...
问题是我忘记初始化列表了
试试这个List projecten = new List{新项目{Name = "projecta",deelnemers = new List{
{new Person { name = "Ed" }},
{new Person { name = "Mike" }}
}
},
new Project {
name = "projectb",
deelnemers = new List<Person>{
{new Person {name = "Max" }},
{new Person {name = "Peter" }}
}
}
};