我们都知道,当我们创建一个这样的匿名类时:
var Employee = new { ID = 5, Name= "Prashant" };
...在运行时它将是类型:
<>f__AnonymousType0<int,string>
有没有办法为这些类指定有意义的名称?
答案 0 :(得分:124)
public class Employee {}
答案 1 :(得分:38)
这是一种匿名类型,它会破坏目的。这些对象被设计为临时的。地狱,这些属性甚至是只读的。
对不起,我是个聪明人。答案是否定的,没有办法告诉编译器匿名类型使用什么名称。
事实上,编译器生成的类型名称在命名中使用非法字符,因此您的应用程序中不会发生名称冲突。
答案 2 :(得分:36)
public class Employee {
public int ID { get; set; }
public string Name { get; set; }
}
然后使用以下语法
var employee = new Employee { ID = 5, Name = "Prashant" };
答案 3 :(得分:24)
使它成为一个有名字的常规课程吗?
public class Employee
{
public int ID;
public string Name;
}
var Employee = new Employee { ID = 5, Name= "Prashant" };
答案 4 :(得分:24)
实际上,如果您不害怕获得非常细致的优点,可以使用TypeBuilder根据您的匿名类型构建自己的运行时类型,这样您就可以指定该类型的名称。当然,在这个线程建议中几乎所有其他人都声明一个类要容易得多,但TypeBuilder方式更令人兴奋。 ;)
答案 5 :(得分:8)
Java World中的答案是local class(在方法中定义),在C#中不存在。
答案 6 :(得分:4)
是的,您正在创建匿名类,如果您希望您的类具有名称,即非匿名,则声明常规类或结构。
答案 7 :(得分:4)
由于它是匿名的,因此无法命名。如果您需要知道类型的名称,那么您必须真正创建一个类。
答案 8 :(得分:4)
不,当你声明它们时,没有办法给这些类提供有意义的类型名称。匿名类型只是匿名的。没有办法明确地“命名”代码中的类型而不诉诸非常难看的黑客。
如果您确实需要为类型指定名称,则需要显式声明并使用具有所需属性的新类型。
答案 9 :(得分:2)
我认为,根据定义,匿名类型不能有一个名称,只是编译器提供的名称。如果您正在寻找有关匿名类型的更有意义的设计时信息,那么您对编译器的期望太高了。