【发布时间】:2018-05-18 09:54:21
【问题描述】:
我有一个数据结构,其中变量的类型为object。但是,我知道在运行时这个对象肯定是List<T>,其中T 应该涵盖多种情况(例如,int、string,...)。在下面的代码中,我想使用List<T> 特有的功能,比如Linq 函数。
通过以下检查,我确定这是一个列表:
if (constantExpression.Value.GetType().GetGenericTypeDefinition() == typeof(List<>))
{
// Want to use Linq here
}
这可能吗?不幸的是,我在网上找不到任何有用的东西。
【问题讨论】:
-
显式声明为 (List
)? -
理论上是可行的,但需要很多尴尬的反思。由于您在编译时不知道
T,因此您不能真正将object转换为List<T>。所以你必须通过反射找到正确的 linq 扩展,并使用MakeGenericMethod来创建正确的通用版本。 -
@AndrejHafner 你如何转换为 generic 类型?如果您在编译时不知道
T,则无法进行转换。 -
之后你想使用什么样的 linq 函数?我正在努力思考你可以用它做什么样的 LINQ 操作,而不涉及知道
T是什么...... -
@Chris 好的。谢谢你的评论。我将采用 Konamiman 提出的以下解决方案
标签: c# .net generics type-conversion