Как вызвать метод с универсальным типом возврата, используя отражение - PullRequest
2 голосов
/ 08 июня 2010

Я пытаюсь вызвать метод с отражением, который имеет общий тип возвращаемого значения, например:

public class SomeClass<T>
{
    public List<T> GetStuff();
}    

Я получаю экземпляр SomeClass с вызовом GetClass<T> универсального метода репозитория.

MethodInfo lGetSomeClassMethodInfo = typeof(IRepository)
    .GetMethod("GetClass")
    .MakeGenericMethod(typeof(SomeClass<>);
object lSomeClassInstance = lGetSomeClassMethodInfo.Invoke(
    lRepositoryInstance, null);

После этого я пытаюсь вызвать метод GetStuff:

typeof(SomeClass<>).GetMethod("GetStuff").Invoke(lSomeClassInstance, null)

Я получаю исключение из-за того, что метод имеет общие аргументы. Однако я не могу использовать MakeGenericMethod для разрешения типа возвращаемого значения. Также, если вместо typeof(SomeClass<>) я использую lSomeClassInstance.GetType() (который должен иметь разрешенные типы) GetMethod("GetStuff") возвращает ноль!

UPDATE

Я нашел решение и скоро опубликую ответ.

1 Ответ

1 голос
/ 08 июня 2010

По какой-то причине экземпляр SomeClass, возвращаемый GetClass, даже после разрешения типов, не позволяет вам вызывать метод GetStuff.

Суть в том, чтосначала нужно просто создать SomeClass, а затем вызвать метод.Как это:

typeof(SomeClass<>)
    .MakeGenericType(StuffType)
    .GetMethod("GetStuff")
    .Invoke(lSomeClassInstance, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...