C#如何将变量名转换为匿名对象属性名?

时间:2009-10-03 21:51:36

标签: c# anonymous-types

使用以下语法创建新的匿名对象时:

string name = "Foo";
var myObject = new { name };

你得到一个名为'name'的对象:

myObject.name == "Foo"; //true

C#使用什么方法来提取变量名?

2 个答案:

答案 0 :(得分:5)

基本上,该表达式等同于

new { name = name }

因为没有提供明确的属性名称。

C#编译器在编译时使用name属性生成一个类。它从变量名称(它显然看到)推断出属性名称。在编译时,所有内容都是静态类型的。在运行时没有执行任何特殊操作(除了匿名类实例的初始化)。没有任何方法可以调用任何方法。

答案 1 :(得分:5)

如果您的问题是“如何获取变量的名称?” (正如你在上面的评论中提到的那样)这是一个错误的问题,因为这并不是首先得到变量的名称。 投影初始化程序根本不必是变量。它需要的只是一个标识符,或一个表达式,后跟一个句点,后跟一个标识符。投影初始值设定项使用的名称是标识符。

如果您的问题实际上是“如何获取变量的名称?”答案是“你没有,因为变量不一定有唯一的名称”。变量可以有零个,一个或多个与之关联的名称,这些名称只在编译时才知道(或者由调试器消耗编译器发出的信息);这些名称在运行时不存在。