C#中如何将Queue转为List()?VS为何不显示ToList()方法
Queue无法调用ToList()的原因及解决办法
问题原因
你使用的是非泛型Queue类(属于System.Collections命名空间),而Linq的ToList()扩展方法仅支持实现IEnumerable<T>接口的泛型集合。非泛型Queue仅实现了非泛型的IEnumerable接口,因此无法直接调用ToList()。
解决办法
1. 改用泛型Queue<T>
将队列声明为泛型类型,使其直接实现IEnumerable<LogRecord>,即可直接调用ToList():
using System.Collections.Generic; using System.Linq; // 替换为泛型Queue<LogRecord> static Queue<LogRecord> LoggingQueue = new Queue<LogRecord>(queueInitialCapacity); // 直接调用ToList() var queueList = LoggingQueue.ToList();
2. 对非泛型Queue做类型转换
如果无法修改队列类型,可通过Cast<T>将非泛型集合转换为泛型IEnumerable<T>,再调用ToList():
// 转换元素类型后生成List var queueList = LoggingQueue.Cast<LogRecord>().ToList();
若队列中存在非
LogRecord类型的元素,Cast<T>会抛出类型转换异常,此时可改用OfType<T>过滤有效元素:var queueList = LoggingQueue.OfType<LogRecord>().ToList();
额外提示
你的代码中存在变量重复定义问题(方法内已声明List<LogRecord> list,lock块内又定义var list),建议调整变量名避免命名冲突。
内容的提问来源于stack exchange,提问作者Sanjay Nakate
相关产品推荐
相关产品推荐

