private static void GetData()
{
dynamic dynamicList =FetchData();
FilterAndSortDataList(dynamicList);
}
private static void FilterAndSortDataList<T>(List<T> dataList)
{
...
}
调用FilterAndSortDataList时出现运行时绑定(bind)错误。有没有一种方法可以在运行时将我的dynamicList转换为
List<T>
?请注意,FetchData()由插件隐含,因此我事先不知道T是什么类型。
最佳答案
我看不出它为什么会失败,除非FetchData
是不正确的数据。
可能性I:FetchData
返回null,因此无法弄清type参数(在C#中null没有类型)。
可能性二:FetchData
没有返回正确的List<T>
对象。
我会重新设计像这样的东西:
private static void GetData()
{
dynamic dynamicList = FetchData();
if (dynamicList is IEnumerable) //handles null as well
FilterAndSortDataList(Enumerable.ToList(dynamicList));
//throw; //better meaning here.
}
它检查返回的类型是否是
IEnumerable
(希望它是某种IEnumerable<T>
-我们不能检查它是否是IEnumerable<T>
本身,因为我们没有T
。这是一个不错的假设),在这种情况下,我们将获得的序列转换为List<T>
,只是确保我们传递了List<T>
。 dynamic
无法与扩展方法一起使用,因此很遗憾,我们不得不调用Enumerable.ToList
。如果dynamicList
为null或不是可枚举,则抛出该异常,它比某些运行时绑定(bind)错误具有更好的含义。关于c# - 动态转换为List <T>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18151018/