当您使用以下语法创建新的匿名对象时:
string name = "Foo";
var myObject = new { name };
您将获得一个具有名为“name”的属性的对象:
myObject.name == "Foo"; //true
C#用什么方法提取变量名?
当您使用以下语法创建新的匿名对象时:
string name = "Foo";
var myObject = new { name };
您将获得一个具有名为“name”的属性的对象:
myObject.name == "Foo"; //true
C#用什么方法提取变量名?
基本上,该表达式等价于
new { name = name }
因为没有提供明确的属性名称。
C# 编译器在编译时生成一个带有name
属性的类。它从变量名(它显然可以看到)推断出属性名。一切都是在编译时静态输入的。在运行时没有执行任何特殊操作(匿名类实例的初始化除外)。没有任何方法被调用。
如果您的问题是“如何获取变量的名称?” (正如您在上面的评论中提到的)那么这是一个错误的问题,因为这首先没有得到变量的名称。投影初始化器根本不需要是变量。它所需要的只是一个标识符,或者一个后跟一个句点和一个标识符的表达式。投影初始化程序使用的名称是标识符。
如果您的问题实际上是“如何获取变量的名称?” 答案是“你没有,因为变量不一定有唯一的名称”。一个变量可以有零个、一个或多个与之关联的名称,并且这些名称仅在编译时知道(或调试器使用编译器发出的信息);名称在运行时不存在。