【问题标题】:Populate array directly through object initializer [closed]通过对象初始化器直接填充数组[关闭]
【发布时间】:2014-11-23 00:30:51
【问题描述】:

我有这两个类:

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

在这种情况下,我怎样才能实现干净且代码更少的解决方案?

【问题讨论】:

  • 您没有正确使用初始化程序:使用Orders = new [] { } 表示您正在初始化一个数组。

标签: c# arrays object-initializers


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    Jeroen 和 Eugene 提供了一些不错的选择,但事实是,如果您使用泛型列表、集合和其他类型,您可以使用您在描述中提供的语法,但不能使用简单的数组。

    因此,如果您将 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 }
        }
    };
    

    【讨论】:

    • C# 标准是否在某个时候发生了变化?目前Orders = { ... } 是一个 array 初始化器。如果public Order[] Orders; 有效。给定public List&lt;Order&gt; Orders;,结果是编译器抱怨“数组初始化器只能分配给数组类型。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 2014-01-29
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多