2011-03-17 58 views
7

我在類中創建類型列表的屬性現在實例化屬性的類型List <>

public List<string> CategoryRef { get; set; } 

當我想一個字符串添加到列表中我嘗試

Product p=new Product(); 
p.CategoryRef.Add("Nick"); 

編譯器破口大罵在我說的對象不是設置爲對象的實例。如何實例化一個屬性?

回答

17

在構造函數中你需要說

this.CategoryRef = new List<string>(); 

所有這一切

public List<string> CategoryRef { get; set; } 

確實是聲明瞭一個名爲CategoryRefList<string>類型的自動屬性。隱藏在該自動屬性後面的是後臺字段,但該後臺字段接收List<string>類型的對象的默認值。因此,默認情況下,後臺字段爲null,這就是爲什麼您必須將其設置在構造函數中(或其他地方,但在第一次使用之前)。

最後,你可能不應該公開暴露setter。至少,這是更好地說

public List<string> CategoryRef { get; private set; } 

你真的想你的類的客戶端能夠以一個新的列表分配給CategoryRef?可能不會。

而在這樣的情況下,我更喜歡手動屬性,這樣我就可以使後備字段只讀。

private readonly List<string> categoryRef = new List<string>(); 
public List<string> CategoryRef { 
    get { 
     return this.categoryRef; 
    } 
} 
3

在對象的構造函數中,應該有一行將屬性設置爲新列表。

public class Product{ 
    public Product() 
    { 
     CategoryRef = new List<string>(); 
    } 

    public List<string> CategoryRef{ get; set;} 
} 
相關問題