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