【发布时间】:2016-01-25 12:23:06
【问题描述】:
是否有可能获得 IQueryable 的 T-Runtime 类型? 如果它是一个普通列表,则没有问题,但如果我检查一个 IQueryable,我总是会得到一个 System.Object 类型。 我的代码现在看起来像这样:
private static Type GetDtoTypeFromDataSource(ReportDataSource dataSourceFromDb)
{
Type result = null;
if (dataSourceFromDb.Data.GetType().IsGenericType)
{
Type[] genericArguments = dataSourceFromDb.Data.GetType().GetGenericArguments();
result = genericArguments.First();
if (result == typeof(Object))
{
var obj = dataSourceFromDb.Data.Cast<object>().ToList();
var t2 = obj.First().GetType();
var t = obj.GetType().GetGenericArguments();
var t3 = obj.GetType();
result = obj.GetType();
}
}
else
{
result = dataSourceFromDb.Data.GetType().GetElementType();
}
return result;
}
我希望,如果我真的通过“ToList”加载列表,我会得到数据,但也不能正常工作。
var t2 = obj.First().GetType();
会成功,但如果列表为空怎么办?这对我来说似乎不是一个好的解决方案?
【问题讨论】:
-
ReportDataSource.Data是如何声明的?不能只是IQueryable<T>。最有可能的是,它在编译时声明为IQueryable<object>,这就是为什么object是您所看到的类型。 -
呃,你是对的 Dmytro,一个重载的构造函数获取了一个 IEnumerable 并将其转换为 Object。
标签: c# reflection iqueryable