C#初始化程序空指针
目前在C#基础上做一些功课。我在这条线得到一个空指针,不能弄清楚发生了什么caussing它: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" },
}
}
};
人员和项目类正确定义,我认为:
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
就可以了。 需要初始化列表,以及:
deelnemers = new List<Person> {
new Person { name = "Xanvier"},
//
}
或者,您也可以在Project
构造函数初始化列表。这样,您的原始代码将按预期工作。
非常明确的解释,谢谢! – Ravenix
试试这个 名单projecten =新列表{ 新项目{ 名= “项目A”, deelnemers =新列表{
{new Person { name = "Ed" }},
{new Person { name = "Mike" }}
}
},
new Project {
name = "projectb",
deelnemers = new List<Person>{
{new Person {name = "Max" }},
{new Person {name = "Peter" }}
}
}
};
“试试这个”不是一个好答案。解释你改变了什么,为什么。 – CodeCaster
解决方案就像Dennis_E在评论中所说: deelnemers = { new Person ... }
将会编译。问题是,它不会初始化您的列表。它只会调用Add。你需要说:
deelnemers = new List<Person> { ...
所以,问题是,我忘了初始化列表。
我不认为这个错误是你认为的错误 - 你能分享一个完整的,可运行的(但是最小的)例子来证明这个问题吗? –
@CodeCaster,这是它注意的行(第一个代码块是一行) 你能澄清为什么它不编译? – Ravenix
重复问题不应该被标记为这样。 OP知道NullReferenceException是什么。 'deelnemers = {新人...} ** **将编译。问题是,它不会初始化您的列表。它只会调用“添加”。你需要说'deelnamers =新列表 {...}' –