我正在使用反射和linq.Dynamic,我在创建一个需要从IQueryable<T>
或IList<T>
获取ISet<T>
的查询时遇到一个小问题。一个东西。
起初我以为我可以写一个小帮手方法:
object Helper<T>( IList<T> list, string query, param object[] values )
{
... do query and return result.
}
不幸的是,编译器需要推断传递对象时不能做的T参数 有一种简单的方法来解决这个问题吗?我也试图避免动态调用这个辅助函数。
编辑: 我有一个Domain对象,目前我正在尝试查询这个类的几个IList集合,以找到在屏幕上显示的正确对象。 基本上我有一个屏幕guid 10和一个xpathish字符串“FruitBasket / Fruit [Ripe == true] / color” 所以我知道Fruit在我的反射代码中是一个IList我检查属性以确定它是否实现IList现在我需要查询此集合来挑选Fruit.Ripe == true对象。为此,我需要一个演员到IQuerable
答案 0 :(得分:4)
如果您只有object
,那么您希望编译器如何知道T
应该是什么?
您还没有展示过如何调用此方法... 您知道(在编译时)T
的类型应该是什么(即使在调用方法的另一个类型参数的术语)?如果不是, 必须动态调用它。
对于某些object
,此IList<T>
实际上是T
吗?如果它为两种不同类型实施IList<T>
会发生什么?
我建议你退后一步,弄清楚在编译时真正知道哪些信息,以及在执行时只知道什么。静态调用泛型方法将要求您在编译时知道类型参数。