有时当将任意对象数组传递给 Activator 时,我会看到以下符号:
new [] {5, "Five"}
在其他情况下,这似乎需要一个命名的对象字典,我看到了:
new {Numeric = 5, Textual = "Five"}
这第二个表达式究竟是什么创建了一个数组?
有时当将任意对象数组传递给 Activator 时,我会看到以下符号:
new [] {5, "Five"}
在其他情况下,这似乎需要一个命名的对象字典,我看到了:
new {Numeric = 5, Textual = "Five"}
这第二个表达式究竟是什么创建了一个数组?
第一个代码生成一个对象数组。
实际上,第二个代码无法编译。如果你的意思是new [] { new { Numeric = 5, Textual = "Five"} }
它是一个匿名类型的数组,但你应该澄清一下。
第二个声明看起来像匿名类型,但它不会编译。您似乎想要拥有一组匿名对象,您可以像这样创建它们:
var anonArray = new[] { new { Numeric = 5, Textual = "Five" },
new { Numeric = 6, Textual = "Six" }};
匿名类型:
匿名类型提供了一种方便的方法,可以将一组只读属性封装到单个对象中,而无需先显式定义类型。类型名称由编译器生成,在源代码级别不可用。每个属性的类型由编译器推断。
第一个示例是创建一个类型数组,object
并在其中放入一个整数和一个字符串。
第二个示例是创建一个匿名类型的数组(大小为 1)。(当new []
数组new {Numeric = 5, Textual = "Five"}
(Numeric
type int
(类型是根据分配给它的内容推断出来的)并且具有 value和type和 value5
的属性。Textual
string
"Five"
第一个示例是一个object
s 数组。它包含两个对象: anint
5
和 a string
"Five"
。第二个是匿名类型的数组。它包含一个对象。一个对象有两个属性,int Numeric
一个值为5
,string Textual
一个值为"Five"
。
第二种更加明确和类型安全,但作为匿名类型,在本地上下文之外没有用处;第一个在某些情况下可能很有用,例如通过反射将参数传递给方法。