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/

10-10 14:34