我是C#的新手。当我们宣布像这样的声明时
var list = new { FirstName = "Jon", LastName ="Doz" }; .
我没有提供任何类型的声明。编译器如何在不抛出错误的情况下接受它。
我的意思是new <without type>
答案 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:
匿名类型提供了一种封装一组的便捷方法 只读属性到单个对象而不必显式 首先定义一个类型。类型名称由编译器生成,并且是 在源代码级别不可用。每个属性的类型是 由编译器推断。