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; }
    }
}

c#初始化器空指针

这部分是一个集合初始化器:

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" }}
            }
        }
        };