我可以为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时信息,那么您对编译器的期望就太高了。