新对象[] {}和新[] {}之间有什么区别?

时间:2013-04-25 15:06:18

标签: c#

有时候,当将任意数组的对象传递给Activator时,我会看到这种表示法:

new [] {5, "Five"}

在其他情况下,这似乎需要一个命名的对象字典,我看到了:

new {Numeric = 5, Textual = "Five"}

创建数组的第二个表达式究竟是什么?

4 个答案:

答案 0 :(得分:4)

第一个代码生成一个对象数组。

实际上,第二个代码无法编译。如果您的意思是new [] { new { Numeric = 5, Textual = "Five"} },那么它是一个匿名类型的数组,但您应该澄清。

答案 1 :(得分:2)

第二个声明看起来像匿名类型,但它不会编译。您似乎想拥有一组匿名对象,您可以这样创建:

var anonArray = new[] { new { Numeric = 5, Textual = "Five" }, 
                        new { Numeric = 6, Textual = "Six" }};

Anonymous types

  

匿名类型提供了一种封装一组的便捷方法   只读属性到单个对象而不必显式   首先定义一个类型。类型名称由编译器生成,并且是   在源代码级别不可用。每个属性的类型是   由编译器推断。

答案 2 :(得分:1)

第一个例子是创建一个类型为object的数组,并在其中放入一个整数和一个字符串。

第二个例子是创建一个匿名类型的数组(大小为1)。 (如果没有为数组提供类型(new []),它将尝试根据数组初始化中所有元素共有的最派生类型推断应该使用的类型。)new {Numeric = 5, Textual = "Five"}是创建一个新的匿名类型,其中包含两个属性Numeric int类型(根据分配给它的内容推断出类型),值为5,属性为{{ 1}}类型Textual和值string

答案 3 :(得分:1)

第一个例子是object的数组。它包含两个对象:int 5string "Five"。第二个是匿名类型的数组。它包含一个对象。一个对象有两个属性,int Numeric的值为5string Textual的值为"Five"

第二种更明确且类型安全,但是是一种匿名类型,在本地上下文之外没有用;第一种在某些情况下可能有用,例如通过反射将参数传递给方法。