我有这段代码:
object test = new {a = "3", b = "4"};
Console.WriteLine(test); //I put a breakpoint here
如何访问a
对象的test
属性?当我放一个断点时,visual studio可以看到这个对象的变量......为什么我不能?我真的需要访问它们。
答案 0 :(得分:6)
如果您需要编译器支持,则应使用var
而非object
。它应该认识到您有一个具有属性a
和b
的对象。您在上面的代码中向下转换为object
,因此编译器将只有对象属性
var test = new {a = "3", b = "4"};
Console.WriteLine(test.a); //I put a breakpoint here
如果因任何原因无法使用var,那么您可以查看dynamic
或this 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
它会编译,但它会在运行时崩溃。