从泛型类型的静态方法返回System.Action,并在运行时定义类型

时间:2012-02-24 22:36:35

标签: c# reflection

下面是我想要实现的一个非常完美的示例

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 个答案:

答案 0 :(得分:3)

你快到了 - 你只需要Delegate.CreateDelegate

Action action = (Action) Delegate.CreateDelegate(typeof(action), null, method);