我们都知道,当我们像这样创建一个匿名类时:
var Employee = new { ID = 5, Name= "Prashant" };
...在运行时它将是以下类型:
<>f__AnonymousType0<int,string>
有没有办法为这些类指定一个有意义的名称?
我们都知道,当我们像这样创建一个匿名类时:
var Employee = new { ID = 5, Name= "Prashant" };
...在运行时它将是以下类型:
<>f__AnonymousType0<int,string>
有没有办法为这些类指定一个有意义的名称?
public class Employee {}
这是一种匿名类型,违背了目的。这些对象被设计为临时的。地狱,这些属性甚至是只读的。
对不起,我是个聪明人。答案是否定的,没有办法告诉编译器为匿名类型使用什么名称。
事实上,编译器生成的类型名称在其命名中使用了非法字符,因此您的应用程序中不会出现名称冲突。
public class Employee {
public int ID { get; set; }
public string Name { get; set; }
}
然后使用以下语法
var employee = new Employee { ID = 5, Name = "Prashant" };
让它成为一个有名字的普通班级?
public class Employee
{
public int ID;
public string Name;
}
var Employee = new Employee { ID = 5, Name= "Prashant" };
实际上,如果您不害怕变得非常琐碎,您可以使用 TypeBuilder 根据您的匿名类型构建您自己的运行时类型,这将允许您指定类型的名称。当然,像这个线程中几乎所有其他人所建议的那样,只声明一个类要容易得多,但是 TypeBuilder 的方式要令人兴奋得多。;)
Java World 中的答案将是本地类(在方法中定义),而 C# 中没有。
是的,您正在创建一个Anonymous Class,如果您希望您的类有一个名称,即Not Anonymous,那么声明一个常规类或结构。
由于它是匿名的,因此您无法命名它。如果您需要知道类型的名称,那么您必须真正创建一个类。
不,没有办法给这些类一个有意义的类型名称,因为你已经声明了它们。匿名类型就是这样,匿名的。如果不求助于非常丑陋的黑客,就没有办法在代码中明确地“命名”类型。
如果您确实需要为类型命名,则需要显式声明并使用具有所需属性的新类型。
我认为,根据定义,匿名类型不能有一个名字,只有编译器给它的名字。如果您正在寻找有关匿名类型的更有意义的设计时信息,那么您对编译器的期望过高。