2016-09-19 152 views
-2

目前在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; } 
    } 
} 
+0

我不认为这个错误是你认为的错误 - 你能分享一个完整的,可运行的(但是最小的)例子来证明这个问题吗? –

+0

@CodeCaster,这是它注意的行(第一个代码块是一行) 你能澄清为什么它不编译? – Ravenix

+1

重复问题不应该被标记为这样。 OP知道NullReferenceException是什么。 'deelnemers = {新人...} ** **将编译。问题是,它不会初始化您的列表。它只会调用“添加”。你需要说'deelnamers =新列表 {...}' –

回答

1

这部分是集合初始化:

deelnemers = 
    { 
     new Person { name = "Ed" }, 
     new Person { name = "Mike" }, 
    } 

这也许是语法在C#中最令人困惑的形式之一。 它不会初始化您的列表。它只调用Add就可以了。 需要初始化列表,以及:

deelnemers = new List<Person> { 
    new Person { name = "Xanvier"}, 
    // 
} 

或者,您也可以在Project构造函数初始化列表。这样,您的原始代码将按预期工作。

+0

非常明确的解释,谢谢! – Ravenix

-1

试试这个 名单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" }} 
      } 
     } 
     }; 
+1

“试试这个”不是一个好答案。解释你改变了什么,为什么。 – CodeCaster

0

解决方案就像Dennis_E在评论中所说: deelnemers = { new Person ... }将会编译。问题是,它不会初始化您的列表。它只会调用Add。你需要说:

deelnemers = new List<Person> { ...

所以,问题是,我忘了初始化列表。