我有一个通用方法,带有以下签名
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%