3

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

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

您将获得一个具有名为“name”的属性的对象:

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

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

4

2 回答 2

5

基本上,该表达式等价于

new { name = name }

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

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

于 2009-10-03T21:56:12.363 回答
5

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

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

于 2009-10-03T22:38:41.280 回答