2011-03-17 80 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;} 
} 
相关问题