如何将对象哄骗到IList <t>?</t>

时间:2009-11-17 16:09:38

标签: .net generics reflection

我正在使用反射和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

1 个答案:

答案 0 :(得分:4)

如果您只有object,那么您希望编译器如何知道T应该是什么?

您还没有展示过如何调用此方法... 知道(在编译时)T的类型应该是什么(即使在调用方法的另一个类型参数的术语)?如果不是, 必须动态调用它。

对于某些object,此IList<T> 实际上T吗?如果它为两种不同类型实施IList<T>会发生什么?

我建议你退后一步,弄清楚在编译时真正知道哪些信息,以及在执行时只知道什么。静态调用泛型方法要求您在编译时知道类型参数。