C# C中匿名类型的一个简单而简洁的定义和解释?

C# C中匿名类型的一个简单而简洁的定义和解释?,c#,anonymous-types,C#,Anonymous Types,我不知道C中的匿名类型是什么,也不知道它是如何使用的。有人能给我一个很好的描述和它的用途吗 [注意:我确实知道它是什么以及如何使用它,但我想我会问那些不知道的人]请参见以下链接: 匿名类型是编译器根据以下表达式生成的类型: new { Property1 = x.Value1, Property2 = y.Value2, z.Value3 } 最后一个类似于Value3=z.Value3 匿名类型的名称是无法描述的,也就是说,您不能在普通C中指定它,但就CLR而言,它是一个完全正常的类型。由于

我不知道C中的匿名类型是什么,也不知道它是如何使用的。有人能给我一个很好的描述和它的用途吗

[注意:我确实知道它是什么以及如何使用它,但我想我会问那些不知道的人]

请参见以下链接:


匿名类型是编译器根据以下表达式生成的类型:

new { Property1 = x.Value1, Property2 = y.Value2, z.Value3 }
最后一个类似于Value3=z.Value3

匿名类型的名称是无法描述的,也就是说,您不能在普通C中指定它,但就CLR而言,它是一个完全正常的类型。由于无法写入名称,如果要使用匿名类型作为类型参数创建匿名类型或泛型类型的变量,则需要使用带有var关键字的隐式类型局部变量:

匿名类型是不可变的,即属性是只读的-生成的类型有一个构造函数,它将所有属性的值作为参数。属性类型是从这些值推断出来的

匿名类型以相当明显的方式覆盖GetHashCode、Equals和ToString——每个属性类型的默认相等比较器用于哈希和相等

它们在LINQ中的使用方式通常与在SQL中使用SELECT Value1作为属性1、Value2作为属性2、Value3的方式相同

每个以相同顺序使用相同属性名称和类型的匿名类型初始值设定项表达式将引用相同的类型,因此您可以编写:

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

另外值得一提的是,VB匿名类型略有不同:默认情况下,它们是可变的。可以使用Key关键字使每个单独的属性不可变。就我个人而言,我更喜欢C方式,但我可以看到可变性在某些情况下很有用。

匿名类型是一种没有名称的类型。您可以在任何不需要类型名称的地方使用它。例如:

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
}

这算不算是重复推特?不算的人可以用谷歌搜索,当他们放弃时,他们可以提出一个问题。你为什么要问它是否对你没有好处?@vanja,@Jherico:你是否从SO第一次打开的时候就开始评论类似的问题?@jasonh:忽略了这样一个事实,即SO现在与最初开始时不同;是的,我认为当你不在乎答案的时候,我只是在重复提问。我在乎答案,我问是因为我试图回答别人的问题,但没有看到这样的问题。你每天都在学习新的东西。我不知道它们是不可变的,并且覆盖了GetHashcode、Equals和ToString。它们用什么覆盖ToString?@jasonh:大括号中用逗号分隔的值,例如{X=2,Y=10}Uh-oh。有人侵入了Jon Skeet的账户,偷走了他的代表、徽章和其他东西;
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
}