动态和反思

时间:2010-12-22 14:10:09

标签: reflection c#-4.0

我想将Reflection与动态结合使用。 假设我有以下电话

dynamic foo = External_COM_Api_Call()

使用COM访问我收到的对象。

现在我想做那样的事情:

String bar = foo.GetType().GetProperty("FooBar").GetValue(foo,null)

但我继续为PropertyInfo获取null。

想法?

1 个答案:

答案 0 :(得分:0)

为什么直接使用反射:

dynamic foo = External_COM_Api_Call();
string value = foo.FooBar;

这是dynamic关键字的重点。你不再需要反思。

如果你想使用反射,那么不要使用dynamic:

object foo = External_COM_Api_Call();
string bar = (string)foo
   .GetType()
   .InvokeMember("FooBar", BindingFlags.GetProperty, null, foo, null);

这是一个完整的工作示例:

class Program
{
    static void Main()
    {
        var type = Type.GetTypeFromProgID("WScript.Shell");
        object instance = Activator.CreateInstance(type);
        var result = (string)type
            .InvokeMember("CurrentDirectory", BindingFlags.GetProperty, null, instance, null);
        Console.WriteLine(result);
    }
}