我在班级
中创建了一个List类型的属性public List<string> CategoryRef { get; set; }
现在,当我想在列表中添加一个字符串时,我尝试
Product p=new Product();
p.CategoryRef.Add("Nick");
编译器对我大吼,说对象没有设置为对象的实例。如何实例化一个属性?
答案 0 :(得分:18)
在构造函数中,您需要说
this.CategoryRef = new List<string>();
所有
public List<string> CategoryRef { get; set; }
确实声明了一个名为List<string>
的{{1}}类型的自动属性。隐含在此自动属性后面的是支持字段,但该支持字段接收类型为CategoryRef
的对象的默认值。因此,默认情况下,支持字段为List<string>
,这就是您必须在构造函数中设置它的原因(或者在第一次使用它之前的其他位置)。
最后,你可能不应该公开曝光setter。至少,最好说
null
您真的希望班级客户能够为public List<string> CategoryRef { get; private set; }
分配新列表吗?可能不是。
在这种情况下,我实际上更喜欢手动属性,以便我可以只读取后备字段。
CategoryRef
答案 1 :(得分:3)
在对象的构造函数中,您应该有一行将属性设置为新列表。
public class Product{
public Product()
{
CategoryRef = new List<string>();
}
public List<string> CategoryRef{ get; set;}
}
答案 2 :(得分:1)
我可能会尝试类似下面的方法
public class Product{
public List<string> CategoryRef{ get; set;} = new List<string>();
}