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

Joh*_*han 3 c# anonymous-types

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

string name = "Foo";
var myObject = new { name };
Run Code Online (Sandbox Code Playgroud)

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

myObject.name == "Foo"; //true
Run Code Online (Sandbox Code Playgroud)

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

Meh*_*ari 5

基本上,这个表达式相当于

new { name = name }
Run Code Online (Sandbox Code Playgroud)

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

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


Eri*_*ert 5

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

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