c#中的动态语法

本文关键字:语法 动态 | 更新日期: 2023-09-27 18:04:00

最近,我遇到了一些c#示例,它们使用了如下语法:

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

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

c#中的动态语法

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

这叫做匿名类型。要在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[],编译器不需要它,在我看来,直接用new[]

更简洁。

这里有几个新特性:

  1. 一个对象初始化器——让你在一个对象上设置属性而不需要先构造它。

  2. 隐式类型变量-使用var关键字将让编译器找出对象的类型

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

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

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

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

更多信息参见匿名类型(c#编程指南)和对象和集合初始化器(c#编程指南)