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

Mil*_*iez 6 c# arrays object-initializers

我有这两个班:

    class Customer
    {
        public string Name;
        public string City;
        public Order[] Orders;
    }
    class Order
    {
        public int Quantity;
        public Product Product;
    }
Run Code Online (Sandbox Code Playgroud)

然后在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 }
                }
            };
Run Code Online (Sandbox Code Playgroud)

但是我无法初始化数组... with a collection initializer.而且我知道这是可能的string[] array = { "A" , "B" };,对我而言看起来是一样的......

当然我可以制作单独的对象Order,将它们放在一个数组然后分配给它Orders,但我不喜欢这个想法.

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

Eug*_*kal 10

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 }
            }
        };
Run Code Online (Sandbox Code Playgroud)


Far*_*ina 7

吉荣和尤金提供了一些很好的选择,但事实是,你的CAN使用,如果你使用泛型列表,收藏等类型,但不能用简单的数组,你在你的描述中提供的语法.

因此,如果您将Customer类定义为:

class Customer
{
    public Customer()
    {
        Orders = new List<Order>();
    }

    public string Name;
    public string City;
    public List<Order> Orders;
}
Run Code Online (Sandbox Code Playgroud)

您可以首先使用您想要使用的语法:

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 }
    }
};
Run Code Online (Sandbox Code Playgroud)