Возврат System.Action из статического метода для универсального типа с типами, определенными во время выполнения - PullRequest
1 голос
/ 25 февраля 2012

Ниже приведен очень парный пример того, чего я пытаюсь достичь

public class CoolClass<T>
{
    public static void DoSomethingCool()
    {
        // Insert cool generic stuff here.
        List<T> coolList = new List<T>();
    }
}

public class OtherClass
{
    public Action ReturnActionBasedOnStaticGenericMethodForType(Type type)
    {
        // Ideally this would just be
        return CoolClass<type **insert magic**>.DoSomethingCool
    }
}

Я знаю, если тип известен, я могу выполнить следующее, и он вернет System.Action

return CoolClass<string>.DoSomethingCool

Я знаю, что все, что я хотел сделать, это вызвать метод, который я могу сделать

Type baseType = typeof(CoolClass<>);
Type[] typeArguments = new [] {type}
Type constructedType = baseType.MakeGenericType(typeArguments);
MethodInfo method = constructedType.GetMethod("DoSomethingCool");
method.Invoke(null,null);

Возможно, я все вместе пошёл по неверному пути.Кажется, я пытаюсь получить method как ссылку на DoSomethingCool метод.Я желаю чего-то вроде (Action) method.

1 Ответ

3 голосов
/ 25 февраля 2012

Ты почти у цели - тебе просто нужно Delegate.CreateDelegate:

Action action = (Action) Delegate.CreateDelegate(typeof(action), null, method);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...