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

自定义Lockable Queue包装类添加Average方法报错咨询

解决Queue不包含Average方法的问题

你遇到的问题根源很明确:你内部使用的Queue是非泛型的System.Collections.Queue,它只实现了非泛型的IEnumerable接口;而LINQ的Average扩展方法需要的是泛型的IEnumerable<T>(比如IEnumerable<float>、IEnumerable<int>),所以直接调用queue.Average()会报错。

下面给你两种可行的解决方案,根据你的实际场景选择:

方案1:将内部队列替换为泛型Queue<T>

如果你的业务场景允许,把内部的非泛型Queue改成泛型的Queue<float>(或者你实际存储的数值类型,比如int),这样泛型队列天然实现IEnumerable<T>,直接就能用LINQ的Average方法:

// 先把类内部的queue字段改成泛型类型
private Queue<float> queue = new Queue<float>();

public float Average() 
{ 
    lock (syncLock) 
    { 
        // 空队列的话可以加判断,避免抛出异常
        if (queue.Count == 0)
            return 0f; // 或者根据需求抛出自定义异常
        return queue.Average(); 
    } 
}

方案2:保留非泛型Queue,通过Cast转换后计算平均值

如果不能修改内部队列的类型,那需要先把非泛型队列里的元素转换成数值类型,再调用Average。记得先引用System.Linq命名空间:

public float Average() 
{ 
    lock (syncLock) 
    { 
        if (queue.Count == 0)
            return 0f;
        
        // 假设队列里的元素都是float,根据实际存储的类型替换
        return queue.Cast<float>().Average(); 
    } 
}

⚠️ 注意:如果队列里存在无法转换为目标数值类型的元素,Cast<T>会抛出InvalidCastException,所以要确保队列中元素的类型和你Cast的类型一致,或者用OfType<T>过滤出有效元素后再计算平均值。

内容的提问来源于stack exchange,提问作者Bachalo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:06:53