直接通过对象初始化器填充数组

时间:2014-09-28 14:34:52

标签: c# arrays object-initializers

我有这两个班级:

    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,但我不喜欢这个想法。

在这种情况下,如何实现干净且代码较少的解决方案?

2 个答案:

答案 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 }
    }
};