调用泛型方法的C#表达式树

时间:2018-01-08 12:21:26

标签: c# generics types casting expression-trees

我有一个通用方法,带有以下签名

 private static void ProcessItem<T>(int id) where T : BaseItem

它以下列方式调用

ProcessItem<RedItem>(id: 2)
ProcessItem<BlueItem>(id: 7)

我的问题是我通过反射启动应用程序的项目类型为Type对象。 所以现在我正在寻找一种方法,我可以构造一个表达式树,它将导致lambda以适当的类型调用此方法。

所以我可以做lambda.Invoke(Type type, int id)之类的事情。这将调用id => ProcessItem<type>(id)

的内容

我在这里找到了一个similliar问题:https://stackoverflow.com/a/2850366/5493420

然而,那里的答案显示了如何实例化IEnumerable<>的通用参数,而我只需要调用我的方法,将Type对象转换为我的方法的实际<Type>参数可以接受。

我不确定这是否可行(将Type对象转换为实际的类型参数),但是我希望听到有关该主题的任何建议。

PS:我也愿意采取不同的方法(可能会有一些反思技巧),只要它不会影响性能超过10-20%

0 个答案:

没有答案