2010-12-22 79 views
1

我想使用反射與動態結合。 可以說我有下面的調用動態和反射

dynamic foo = External_COM_Api_Call()

訪問,我接收使用COM對象。現在

我想要做的財產以後這樣的:

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

但我不斷收到對的PropertyInfo空。

想法?

回答

0

爲什麼使用反射時,你可以直接:

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

這就是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); 
    } 
} 
+0

動態編碼。我想指定要通過(例如)配置文件 – Jaster 2010-12-22 14:15:30