Create delegate with types known at runtime

前端 未结 2 1278
清歌不尽
清歌不尽 2021-01-24 03:00

How can I create a Delegate with types only known at run time ?

I would like to do the following :

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


        
2条回答
  •  我在风中等你
    2021-01-24 03:12

    I suspect you want Expression.GetFuncType as a simpler way of doing your typeof(...).MakeGenericType operation.

    var delegateType = Expression.GetFuncType(type1, type2);
    Delegate getter = Delegate.CreateDelegate(delegateType, someMethodInfo);
    

    You can't have a compile-time type for getter that's more specific than Delegate though1, because you simply don't know that type at compile-time. You could potentially use dynamic though, which would make it easier to invoke the delegate:

    dynamic getter = ...;
    var result = getter(input);
    

    1 As noted in comments, you could cast to MulticastDelegate, but it wouldn't actually buy you anything.

提交回复
热议问题