访问匿名类型变量

时间:2013-12-06 15:20:08

标签: c# anonymous-types

我有这段代码:

object test = new {a = "3", b = "4"};
Console.WriteLine(test); //I put a breakpoint here

如何访问a对象的test属性?当我放一个断点时,visual studio可以看到这个对象的变量......为什么我不能?我真的需要访问它们。

2 个答案:

答案 0 :(得分:6)

如果您需要编译器支持,则应使用var而非object。它应该认识到您有一个具有属性ab的对象。您在上面的代码中向下转换为object,因此编译器将只有对象属性

var test = new {a = "3", b = "4"};
Console.WriteLine(test.a); //I put a breakpoint here

如果因任何原因无法使用var,那么您可以查看dynamicthis grotty hack for passing anonymous types from Skeet

答案 1 :(得分:2)

如果您不能为匿名类使用静态类型,则可以使用dynamic,如下所示:

static object MakeAnonymous() {
    return new {a = "3", b = "4"};
}
static void Main(string[] args) {
    dynamic test = MakeAnonymous();
    Console.WriteLine("{0} {1}", test.a, test.b);
}

这种方法的缺点是编译器不会帮助您在未定义属性时检测情况。例如,你可以写这个

Console.WriteLine("{0} {1}", test.abc, test.xyz); // <<== Runtime error

它会编译,但它会在运行时崩溃。