一个简单和简洁definiton和匿名类型的解释在C#?(A simple and succinct definiton and explanation of anonymous types in C#?)

我不知道什么是“匿名类型”是在C#也不是如何使用的。 可以somone给我的是一个很好的说明,它的使用?

[注:我真的知道它是什么,以及如何使用它,但认为我会问对于那些不这样做]

Answer 1:

匿名类型是由编译器生成的类型由于这样的表达式:

new { Property1 = x.Value1, Property2 = y.Value2, z.Value3 }

(最后一个是像Value3 = z.Value3 )。

匿名类型的名称是“难以启齿” - 即你不能在普通的C#指定它 - 但它是一个完全正常的类型至于CLR而言。 正如你不能写名字,如果你想创建一个匿名类型的变量(或使用匿名类型的类型参数泛型类型),你需要使用一个隐式类型的局部变量var关键字:

var person = new { Name = "Bill", Address = "..." };

C#匿名类型是不可变的(即,属性是只读的) - 生成的类型具有单一的构造,其取值为所有属性作为参数。 物业类型从数值推断。

匿名类型重写GetHashCodeEqualsToString在相当明显的方式-默认的相等比较每个属性类型用于散列和平等。

它们通常用在LINQ在你使用SQL“SELECT值1作为Property1,值2作为Property2,值3”相同的方式。

它使用相同的属性名称和类型以相同的顺序每一个匿名类型初始化表达式会参考同类型的,所以你可以写:

var x = new { Name = "Fred", Age = 10 };
x = new { Name = "Bill", Age = 15 };

这也是值得了解VB匿名类型略有不同:默认情况下,他们是可变的。 您可以使用“钥匙”关键字让每一个人属性是不可改变的。 我个人比较喜欢C#的方式,但我可以看到的可变性是在某些情况下非常有用。



Answer 2:

请参阅以下链接:

http://www.developer.com/net/csharp/article.php/3589916/The-New-Anonymous-Types-Feature-in-C-30.htm

http://www.west-wind.com/weblog/posts/189329.aspx

http://michaelsync.net/2008/03/06/c-30-tutorials-understanding-about-anonymous-types

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



Answer 3:

An anonymous type is a type that has no name. You can use it anywhere you don't need the name of the type. For instance:

var query = from x in set where x.Property1 = value select new {x.Property1, x.Property2};
foreach (var q in query) {
    // do something with q.Property1, q.Property2
}