2012-12-20 47 views
6

我想用我的自定義類包裝List類。至於現在我有這樣的事情;包裝List.Add()給出 - 未將對象引用設置爲對象的實例

public class PriorityListOfNodes 
{ 

    private List<Node>   list_; 
    private IComparer<Node>  sorter_; 

    public List<Node> List_ { 
      get {return list_;} 
      set {list_ = value;} 
    } 

    public PriorityListOfNodes() 
    { 
      sorter_ = new NodeSorter_fValueDescending(); 
    } 

    public Node PopFromEnd() 
    { 
      Node temp = new Node (list_ [list_.Count - 1]); 
      list_.RemoveAt (list_.Count - 1); 
      return temp; 
    } 

    public Node PeekFromEnd() 
    { 
      return list_ [list_.Count - 1]; 
    } 

    public void Add (ref Node toAdd) 
    { 
      Debug.Log (toAdd); 
      list_.Add (toAdd); 
      list_.Sort (sorter_); 
    } 
} 

當我現在做的

Node temp = new Node(10,20); //custom constructor 
PriorityListOfNodes l = new PriorityListOfNodes(); 
l.add(temp); 

我得到運行時異常:未設置爲一個對象

的實例,我也試過沒有

對象引用ref但結果相同。我在這裏做錯了什麼?

+0

非常奇怪的命名風格..通常私人領域有下劃線前綴,或者他們沒有任何前綴 –

+0

@lazyberezovsky我曾用前綴,但它需要更長的時間來寫(你完成單詞自動完成)。 – Patryk

回答

9

你永遠不會實例化一個List<Node>

public PriorityListOfNodes() 
    { 
      sorter_ = new NodeSorter_fValueDescending(); 
      list_ = new List<Node>(); 
    } 
+0

非常感謝! - 來自'C++'並不容易... – Patryk

1

默認情況下,類具有空參數構造函數,所以你有效地得到:

public class PriorityListOfNodes 
{ 
    private List<Node> list_; 
    // ... 

    public PriorityListOfNodes() 
    { 
    } 

    // ... 
} 

當你以後叫Add列表聲明,但不會被初始化。你需要在某些時候要做到這一點,可能是在構造函數中:

public class PriorityListOfNodes 
{ 
    private List<Node> list_; 
    // ... 

    public PriorityListOfNodes() 
    { 
     this.list_ = new List<Node>(); 
     // ... 
    } 

    // ... 
} 

Using Constructors (C#)

相關問題