我有这两个班级:
class Customer
{
public string Name;
public string City;
public Order[] Orders;
}
class Order
{
public int Quantity;
public Product Product;
}
然后在Main
我执行以下操作:
Customer cust = new Customer
{
Name = "some name",
City = "some city",
Orders = {
new Order { Quantity = 3, Product = productObj1 },
new Order { Quantity = 4, Product = productObj2 },
new Order { Quantity = 1, Product = producctObj3 }
}
};
但我无法初始化数组... with a collection initializer
。
而且我知道这个,即可能string[] array = { "A" , "B" };
对我来说是相同的......
当然我可以制作Order
的单独对象,将它们放在一个数组中,然后将其分配给Orders
,但我不喜欢这个想法。
在这种情况下,如何实现干净且代码较少的解决方案?
答案 0 :(得分:9)
C#不为对象初始化提供JSON样式表示法,因为它是强静态类型语言,不使用激进类型推断。在使用初始化程序代码之前,必须调用数组构造函数(new Order[]
):
Customer custKim = new Customer
{
Name = "some name",
City = "some city",
Orders = new Order[]{
new Order { Quantity = 3, Product = productObj1 },
new Order { Quantity = 4, Product = productObj2 },
new Order { Quantity = 1, Product = producctObj3 }
}
};
答案 1 :(得分:7)
Jeroen和Eugene提供了一些不错的选择,但事实是,如果你使用通用列表,集合和其他类型,你 CAN 使用你在描述中提供的语法,但不是简单的阵列。
因此,如果您将Customer类定义为:
class Customer
{
public Customer()
{
Orders = new List<Order>();
}
public string Name;
public string City;
public List<Order> Orders;
}
您可以首先使用您想要使用的语法:
Customer cust = new Customer
{
Name = "some name",
City = "some city",
Orders = {
new Order { Quantity = 3, Product = productObj1 },
new Order { Quantity = 4, Product = productObj2 },
new Order { Quantity = 1, Product = producctObj3 }
}
};