使用运行时已知的类型创建委托

yhc*_*boy 1 .net c# delegates

如何创建仅在运行时已知类型的委托?

我想做以下事情:

Type type1 = someObject.getType();
Type type2 = someOtherObject.getType();   

var getter = (Func<type1, type2>)Delegate.CreateDelegate(
    typeof(Func<,>).MakeGenericType(type1, type2), someMethodInfo);
Run Code Online (Sandbox Code Playgroud)

我怎样才能达到类似的效果?

Jon*_*eet 7

我怀疑你想要Expression.GetFuncType一个更简单的方法来做你的typeof(...).MakeGenericType操作.

var delegateType = Expression.GetFuncType(type1, type2);
Delegate getter = Delegate.CreateDelegate(delegateType, someMethodInfo);
Run Code Online (Sandbox Code Playgroud)

你不能有一个编译时类型getter,这比更具体的Delegate,虽然1,因为你根本不知道该类型在编译时.您可以使用dynamic,这样可以更容易地调用委托:

dynamic getter = ...;
var result = getter(input);
Run Code Online (Sandbox Code Playgroud)

1如评论中所述,你可以MulticastDelegate,但它实际上不会给你买任何东西.