将委托作为类型参数传递给方法

时间:2015-12-11 23:02:32

标签: c# delegates

如何使方法获取方法信息并从中创建某种类型的委托(如Action)?每次我想在我的代码中使用Action foo = (Action)Delegate.CreateDelegate(typeof(Action), info)之类的内容时会感到很痛苦,特别是如果有问题的委托类型类似于Func<String, String, String, String, String, String>

1 个答案:

答案 0 :(得分:0)

虽然您可以调用Delegate.CreateDelegate,但它会返回Delegate类型的对象。但是我能够制作出一个以你提供的类型返回的方法。它看起来像这样:

public static T MakeDelegate<T>(MethodInfo info){
    return (T)(Object)Delegate.CreateDelegate(typeof(T), info);
}

并像这样调用它:

Action foo = MakeDelegate<Action>(bar);

我测试了它,它确实有效。

除此之外:我正在寻找一个问题来附上这个答案,但找不到答案,所以我做了一个。