匿名类数组和对象数组有什么区别?

Min*_*iel 6 c#

我不明白之间的差别Anonymous Class,并object Class

如果我有一个匿名类型对象:

var x = new []
        {
            new {name = "x", phone = 125},
            new {name = "f", phone = 859},
            new {name="s",phone=584}
        };
Run Code Online (Sandbox Code Playgroud)

我可以看到我如何迭代它并获得这些属性的值 x.name ...

但如果我改成这个 object

var x = new Object[]
        {
            new {name = "x", phone = 125},
            new {name = "f", phone = 859},
            new {name="s",phone=584}
        };
Run Code Online (Sandbox Code Playgroud)

那么如果我循环通过它我将无法访问属性?我已经尝试了不同的方法来从这个对象获取值,但我失败了,可能是我错过了什么?什么是生成点,object array我该如何消费呢?

我知道我不能做这样的事情: new Object[] {name = 'x' ...

das*_*ght 1

在这两种情况下,数组都是强类型的。在这两种情况下,数组都包含相同匿名类型的对象。唯一的区别是,在第一种情况下,数组具有匿名对象的类型,因此编译器知道其中对象的属性,而在第二种情况下,编译器不知道这些属性。

我尝试了不同的方法来获取该对象的值,但失败了,可能是我错过了什么?

然而,这些属性仍然保留在那里,您可以通过反射或使用dynamicC# 4 的类型来访问它们:

var x = new Object[]
    {
        new {name = "x", phone = 125},
        new {name = "f", phone = 859},
        new {name="s",phone=584}
    };
var bigPhone = x.Cast<dynamic>().Where(v => v.phone > 500);
foreach (dynamic item in bigPhone) {
    Console.WriteLine("name={0}, phone={1}", item.name, item.phone);
}
Run Code Online (Sandbox Code Playgroud)

请注意,此解决方案并不是使用第一个示例中的静态类型数组的等效替代方案。它只是静态类型丢失时的一种解决方法。