2011-03-17 12 views
7

stworzyłem właściwość typu listy w mojej klasieinstancji właściwość typu List <>

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

Teraz, gdy chcę dodać ciąg do listy staram

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

Kompilator wrzeszczy na mnie mówiąc, że obiekt nie jest ustawiony na instancję obiektu. Jak utworzyć instancję nieruchomości?

Odpowiedz

17

W konstruktorze trzeba powiedzieć

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

Wszystko to

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

robi to zadeklarować auto właściwość typu List<string> nazwie CategoryRef. Niejako za tą właściwością automatyczną jest pole zaplecza, ale to pole podrzędne otrzymuje wartość domyślną dla obiektów typu List<string>. Dlatego domyślnym polem jest null i dlatego musisz ustawić je w konstruktorze (lub w innym miejscu, ale przed użyciem po raz pierwszy).

Na koniec prawdopodobnie nie powinno się ujawniać publiczności. Jako minimum, to lepiej powiedzieć

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

Czy naprawdę chcą klienci swojej klasie, aby móc przypisać nową listę CategoryRef? Prawdopodobnie nie.

W takich sytuacjach wolę własność ręczną, więc mogę utworzyć pole odczytu tylko do odczytu.

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

W konstruktorze obiektu powinien znajdować się wiersz, który ustawia właściwość na nową listę.

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

    public List<string> CategoryRef{ get; set;} 
} 
Powiązane problemy