c#中的动态语法
本文关键字:语法 动态 | 更新日期: 2023-09-27 18:04:00
最近,我遇到了一些c#示例,它们使用了如下语法:
var result = new { prop1 = "hello", prop2 = "world", prop3 = "." };
我真的很喜欢。它看起来有点像JSON。但是,我不知道这个语法叫什么。出于这个原因,我不确定如何了解更多。我对如何在结果中定义对象数组很感兴趣。例如,如果我想为prop3返回一个项目数组,该怎么办?那会是什么样子?这个语法叫什么?
这在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[]
这里有几个新特性:
一个对象初始化器——让你在一个对象上设置属性而不需要先构造它。
隐式类型变量-使用
var
关键字将让编译器找出对象的类型
您可以组合这些特性来形成一个匿名类型。由于您不必在编译时声明或构造类型,因此您可以声明此对象,编译器将在IL中为您生成适当的类型并构造它。
这些是对象和集合初始化式。参见http://msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx。
下面的代码是使用对象初始化器的匿名类型的示例
var result = new { prop1 = "hello", prop2 = "world", prop3 = "." };
更多信息参见匿名类型(c#编程指南)和对象和集合初始化器(c#编程指南)