You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:16:28