20

最近,我遇到了使用如下语法的 C# 示例:

var result = new { prop1 = "hello", prop2 = "world", prop3 = "." };

我很喜欢。它看起来有点像 JSON。但是,我不知道这种语法叫什么。出于这个原因,我不确定如何进一步了解它。我真的很想弄清楚如何在结果中定义对象数组。例如,如果我想为 prop3 返回一个项目数组怎么办?那会是什么样子?这种语法叫什么?

4

5 回答 5

25

这在 C# 中称为匿名类型。

要返回一个数组,您可以简单地内联它:

var result = new { prop1 = "hello", prop2 = "world", prop3 = new int[] {1,2,3} };

或者事先声明并使用它:

int[] array = new int[] {1,2,3};
var result = new { prop1 = "hello", prop2 = "world", prop3 = array};
于 2013-03-15T14:50:52.560 回答
5

它被称为匿名类型。要返回 prop3 中的对象数组,您可以编写

var result = new { prop1 = "hello", prop2 = "world", prop3 = new[] { "h", "e", "l", "l", "o" } };

我正在使用字符串,但对于任何类型的对象都是相同的:

var result = new { prop1 = "hello", prop2 = "world", prop3 = new[] { new YourType(), new YourType(), new YourType() } };

请注意,数组中对象的类型在数组的声明中不是必需的;你不需要写new YourType[],编译器不需要它,而且 IMO 简单地使用它更干净new[]

于 2013-03-15T14:51:45.770 回答
3

这里有几个新功能:

  1. 对象初始化器- 让您在不先构造对象的情况下设置对象的属性。

  2. 隐式类型变量- 使用关键字var将让编译器确定对象是什么类型。

你可以结合这些特性来形成一个匿名类型。由于您不必在编译时声明或构造类型,因此您可以声明此对象,编译器将生成适当的类型并在 IL 中为您构造它。

于 2013-03-15T14:58:20.530 回答
2

这些是对象和集合初始化器。请参阅http://msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx

于 2013-03-15T14:50:51.450 回答
2

以下代码是使用对象初始化器的匿名类型示例

var result = new { prop1 = "hello", prop2 = "world", prop3 = "." };

有关更多信息,请参阅匿名类型(C# 编程指南)对象和集合初始化器(C# 编程指南)

于 2013-03-15T14:51:53.370 回答