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

时间:2009-04-27 13:08:49

标签: c# .net c#-3.0 anonymous-class

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

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

...在运行时它将是类型:

<>f__AnonymousType0<int,string>

有没有办法为这些类指定有意义的名称?

10 个答案:

答案 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方式更令人兴奋。 ;)

TypeBuilder

答案 5 :(得分:8)

Java World中的答案是local class(在方法中定义),在C#中不存在。

答案 6 :(得分:4)

是的,您正在创建匿名类,如果您希望您的类具有名称,即非匿名,则声明常规类或结构。

答案 7 :(得分:4)

由于它是匿名的,因此无法命名。如果您需要知道类型的名称,那么您必须真正创建一个类。

答案 8 :(得分:4)

不,当你声明它们时,没有办法给这些类提供有意义的类型名称。匿名类型只是匿名的。没有办法明确地“命名”代码中的类型而不诉诸非常难看的黑客。

如果您确实需要为类型指定名称,则需要显式声明并使用具有所需属性的新类型。

答案 9 :(得分:2)

我认为,根据定义,匿名类型不能有一个名称,只是编译器提供的名称。如果您正在寻找有关匿名类型的更有意义的设计时信息,那么您对编译器的期望太高了。