我可以为C#中的匿名类指定一个有意义的名称吗?

我们都知道,当我们创build一个这样的匿名类:

var Employee = new { ID = 5, Name= "Prashant" }; 

…在运行时它将是types的:

 <>f__AnonymousType0<int,string> 

有什么办法可以为这些类指定一个有意义的名字吗?

 public class Employee {} 

这是一个匿名types,这个目的是失败的。 这些对象被devise为临时的。 地狱,属性是只读的。

对不起,我是一个聪明的屁股。 答案是否定的,没有办法告诉编译器匿名types使用什么名字。

事实上,编译器生成的types的名称在其命名中使用非法字符,以便在应用程序中不能有名称冲突。

 public class Employee { public int ID { get; set; } public string Name { get; set; } } 

然后使用以下语法

 var employee = new Employee { ID = 5, Name = "Prashant" }; 

让它成为一个有名字的普通class级?

 public class Employee { public int ID; public string Name; } var Employee = new Employee { ID = 5, Name= "Prashant" }; 

实际上,如果你不怕变得非常坚韧,你可以使用TypeBuilder根据你的匿名typesbuild立你自己的运行时types,这将允许你为types指定一个名字。 当然,在这个线程提出的几乎所有其他人声明一个类要容易得多,但TypeBuilder的方式更令人兴奋。 ;)

TypeBuilder

Java World中的答案将是一个本地类 (在方法中定义),C#中不存在。

是的,你正在创build一个匿名类 ,如果你想要你的类有一个名字,即不匿名 ,然后声明一个普通的类或结构。

既然它是匿名的,你不能命名它。 如果你需要知道一个types的名字,那么你必须真正创build一个类。

不,没有办法为这些类声明一个有意义的types名称。 匿名types就是匿名的。 没有办法明确地“命名”代码中的types,而不诉诸非常丑陋的黑客。

如果你真的需要给这个types一个名字,你将需要显式声明并使用你需要的属性的新types。

我认为,按照定义,匿名types不能有一个名字,只是编译器给它的名字。 如果您正在寻找有关匿名types的更有意义的devise时信息,那么您对编译器的期望就太高了。