1

有时当将任意对象数组传递给 Activator 时,我会看到以下符号:

new [] {5, "Five"}

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

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

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

4

4 回答 4

4

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

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

于 2013-04-25T15:09:39.280 回答
2

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

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

匿名类型

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

于 2013-04-25T15:07:25.000 回答
1

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

第二个示例是创建一个匿名类型的数组(大小为 1)。(当new []数组new {Numeric = 5, Textual = "Five"}Numerictype int(类型是根据分配给它的内容推断出来的)并且具有 value和type和 value5的属性。Textualstring"Five"

于 2013-04-25T15:19:10.340 回答
1

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

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

于 2013-04-25T15:20:12.617 回答