C#使用Predicate筛选数据到List时遇类型转换错误
解决Where查询结果无法直接转为List的问题
你遇到的错误是因为LINQ的Where方法返回的是WhereListIterator<T>类型(它实现了IEnumerable<T>接口),并不是List<T>,所以直接强制类型转换会失败。
两种可行的解决方法:
- 使用
ToList()方法直接生成List实例
public async Task CompareList(List<ListClass> listInstance1) { List<ListClass> listInstance2 = listInstance1.Where(x => x.Active == "A").ToList(); }
ToList()会遍历Where返回的查询结果,创建一个新的List<ListClass>实例,完美匹配变量类型。
- 使用
AddRange()方法添加元素
public async Task CompareList(List<ListClass> listInstance1) { List<ListClass> listInstance2 = new List<ListClass>(); listInstance2.AddRange(listInstance1.Where(x => x.Active == "A")); }
AddRange()支持接收IEnumerable<T>类型的参数,能直接把筛选后的所有元素添加到已初始化的List中。
另外补充:如果你的方法里没有实际的异步操作,async关键字可以去掉,改成public void CompareList(...)或者public Task CompareList(...)(如果需要返回Task的话)。
内容的提问来源于stack exchange,提问作者Dev101684
相关产品推荐
相关产品推荐

