динамика и отражение - PullRequest
       2

динамика и отражение

1 голос
/ 22 декабря 2010

Я бы хотел использовать Reflection в сочетании с динамическим.Допустим, у меня есть следующий вызов

dynamic foo = External_COM_Api_Call()

Доступ к объекту, который я получаю, используя COM.

Теперь я хотел бы сделать что-то подобное:

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

Но я получаю нулевое значение для PropertyInfo.

Идеи?

1 Ответ

0 голосов
/ 22 декабря 2010

Зачем использовать отражение, когда вы можете напрямую:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...