类型声明澄清

时间:2013-06-29 04:58:45

标签: c#-4.0

我是C#的新手。当我们宣布像这样的声明时

var list = new { FirstName = "Jon", LastName ="Doz" }; .

我没有提供任何类型的声明。编译器如何在不抛出错误的情况下接受它。

我的意思是new <without type>

5 个答案:

答案 0 :(得分:4)

它被称为anonymous type

C#编译器将它在后台转换为更详细的声明,例如:

class __Anonymous1
{
   private string firstName ;
   private string lastName;
   public string FirstName{get { return firstName; } set { firstName = value ;} }
   public string LastName{ get { return lastName; } set { lastName= value ; } }
}
__Anonymous1 list = new __Anonymous1();
list.FirstName = "Jon";
list.LastName ="Doz";

答案 1 :(得分:2)

它实际上是在创建一个anonymous type,一种只有你声明的那些字段的临时类。

请注意var没有这样做。 var只是进行类型推理,因此您可以说var list = new List<int>();并且它不会创建匿名类型。它是负责临时类创建的new {...}。但是,使用var是将其存储在变量中的唯一方法,因为匿名类型没有名称。

答案 2 :(得分:0)

这称为匿名类型。它只是属于没有名称的类型的对象,并且具有您给它的这两个属性。

您可以在此处阅读有关匿名类型的更多信息:

http://msdn.microsoft.com/en-us/library/vstudio/bb397696.aspx

答案 3 :(得分:0)

正如@IanHenry所述,您正在创建一个匿名类型。它们是为了支持LINQ而创建的,并且是只读的。这意味着如果您创建一个类似问题的匿名类型,则无法更新任何值。

答案 4 :(得分:0)

这个概念被称为Anonymous Types。来自MSDN:

  

匿名类型提供了一种封装一组的便捷方法   只读属性到单个对象而不必显式   首先定义一个类型。类型名称由编译器生成,并且是   在源代码级别不可用。每个属性的类型是   由编译器推断。