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

本文关键字:泛型类型 静态方法 System Action 返回 类型 运行时 定义 | 更新日期: 2023-09-27 18:25:40

下面是我试图实现的一个非常成对的例子

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
    }
}

我知道如果类型是已知的,我可以做以下操作,它将返回系统。操作

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这样的东西。

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

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

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