2016-09-19 148 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> { ...

所以,問題是,我忘了初始化列表。