我想知道如何在它的创作上得到一个对象。我有两个类,一个名为Product的类,另一个名为Inventory的类,它是一个静态类。 以下是产品类别的定义:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public int Quantity { get; set; }
}
这里是Inventory类的定义:
public static class Inventory
{
public static List<Product> Products { get; set; }
}
我想做的是以下内容,当创建了Product类型的对象时,此对象应添加到Inventory.Products
列表中,以便稍后我可以查询库存信息。
我希望能够在Product类中执行类似的操作:
public class Product
{
public Product()
{
Inventory.Products.Add(this);
}
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public int Quantity { get; set; }
}
但是,如果我使用构造函数执行此操作,我将获得NullReferenceException
,因为Products
尚未初始化。初始化静态Products
列表的最佳位置在哪里?
答案 0 :(得分:1)
空引用不是Product
,而是列表。只需在尝试使用静态列表之前初始化静态列表。它自己的类静态初始化程序将是一个很好的地方:
public static class Inventory
{
public static List<Product> Products { get; set; }
static Inventory()
{
Products = new List<Product>();
}
}
答案 1 :(得分:1)
初始化静态属性有不同的可能性。例如,您可以使用只读后备字段:
public static class Inventory
{
private static readonly List<Product> products = new List<Product>();
public static List<Product> Products { get { return products; } }
}
从C#6开始,您可以使用readonly属性:
public static class Inventory
{
public static List<Product> Products { get; } = new List<Product>();
}
或(已建议David)您可以使用静态构造函数:
public static class Inventory
{
public static List<Product> Products { get; private set; }
static Inventory()
{
Products = new List<Product>();
}
}