【发布时间】:2019-04-22 13:53:43
【问题描述】:
我知道在 C# 中我可以像这样声明一个匿名类型数组:
var anons = new[]
{
new { name = "" , something = ""},
new { name = "", something = "" }
};
我可以理解所有对象都需要具有相同的属性,否则将无法遍历它们并使用这些属性,例如:
foreach (var anon in anons)
{
Console.WriteLine(anon.name);
}
但我不明白的是为什么它们的属性需要具有相同的顺序?
例如,以下代码将无法编译:
var anons = new[]
{
new { name = "" , something = ""},
new { something = "", name = "" }
};
为什么不允许这样做,因为在 normal 对象中,无论它们的顺序如何,都可以声明属性,并且其余代码可以使用它们,就像现在一样?
【问题讨论】:
-
这可能是为了简化编译器和哈希码的生成,并防止
ToString()输出的差异,但我不确定我们中的任何人都可以解释为什么特定的设计做出了决定。 -
@Amy 这确实是一个关于编译器设计的问题,而不是关于如何做某事的问题,在这种情况下确实有少数人可以完全回答。我只是希望能得到最接近现实的答案。
标签: c# arrays .net anonymous-types