如何创建仅在运行时已知类型的委托?
我想做以下事情:
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)
我怎样才能达到类似的效果?
我怀疑你想要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,但它实际上不会给你买任何东西.
| 归档时间: |
|
| 查看次数: |
2127 次 |
| 最近记录: |