我想将Reflection与动态结合使用。 假设我有以下电话
dynamic foo = External_COM_Api_Call()
使用COM访问我收到的对象。
现在我想做那样的事情:
String bar = foo.GetType().GetProperty("FooBar").GetValue(foo,null)
但我继续为PropertyInfo获取null。
想法?
答案 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);
}
}