2011-03-17 8 views
7

I creó una propiedad de la lista Tipo de mi claseInstantiate una propiedad de tipo List <>

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

Ahora cuando quiero agregar una cadena a la lista Trato

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

El compilador grita a mí diciendo que el objeto no está configurado para una instancia de un objeto. ¿Cómo instanciar una propiedad?

Respuesta

17

En el constructor que tiene que decir

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

Todo lo que

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

hace es declarar un auto-propiedad de tipo List<string> llamado CategoryRef. Implícitamente detrás de esta propiedad automática hay un campo de respaldo, pero ese campo de respaldo recibe el valor predeterminado para los objetos de tipo List<string>. Por lo tanto, de forma predeterminada, el campo de respaldo es null y esta es la razón por la que debe establecerlo en el constructor (o en otro lugar, pero antes de usarlo por primera vez).

Finalmente, probablemente no deberías exponer al colocador públicamente. Como mínimo, es mejor decir

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

Está seguro de querer clientes de su clase para poder asignar una nueva lista de CategoryRef? Probablemente no.

Y en situaciones como esta, en realidad prefiero una propiedad manual para que pueda hacer que el campo de respaldo sea de solo lectura.

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

En el constructor del objeto, debe tener una línea que establezca la propiedad en una nueva lista.

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

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