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

遍历ConcurrentQueue时修改元素属性不生效的问题求助

遍历ConcurrentQueue时修改元素属性不生效的问题求助

各位大佬好,我最近遇到一个非常困惑的问题,想请大家帮忙分析下:

我正在处理一个复杂的对象结构,其中有一个ConcurrentQueue<SimpleProduct>类型的集合,我需要给队列里的SimpleProduct对象的Any字段赋值,但赋值后这个字段始终是null,完全没生效。

先给大家看下我的对象结构(已简化):

核心类定义

public class RefundBasics
{
    public InvoiceDetail Invoice { get; set; }
    // 其他属性...
}

public class InvoiceDetail
{
    public SaveSaleRecord.SaveSaleRequest sale { get; set; }
    // 其他属性...
}

public class SaveSaleRequest
{
    public Customer Customer { get; set; }
    public ConcurrentQueue<SimpleProduct> Items { get; set; }
    // 其他属性...
}

public class SimpleProduct
{
    public object Any { get; set; }
    // 其他属性...
}

我的处理代码

我通过下面的方法来处理这个队列:

// 调用方式
ReplenishStockOnRefundedItems(Refund, replenish_location, user, apikey, saveChanges);
// 其中Refund是RefundBasics类型的对象

internal static void ReplenishStockOnRefundedItems(RefundBasics Refund, string replenish_location, int user, string apikey, bool doit)
{
    foreach (SimpleProduct item in Refund.Invoice.sale.Items)
    {
        // 跳过不需要处理的项
        if (!item.PickPhysicalProduct || item.Quantity <= 0)
            continue;

        string replenish_location_id = "";
        // 这里有具体的逻辑计算replenish_location_id的值,确认能得到正确的字符串
        
        // 尝试给当前item的Any属性赋值
        item.Any = replenish_location_id;
    }
}

问题现象

  • 预期结果:遍历完成后,符合条件的SimpleProduct对象的Any属性应该被设置为计算好的replenish_location_id,后续代码可以正常读取这个值。
  • 实际结果:不管怎么赋值,Item.Any始终是默认的null,赋值操作完全没生效。

我自己的排查思路

  1. 一开始怀疑是ConcurrentQueue的问题?但我理解ConcurrentQueue是线程安全的容器,这种遍历修改元素属性的操作应该是支持的吧?毕竟我只是修改元素本身的属性,不是修改队列的结构。
  2. 之前我用Linq的.Where过滤出符合条件的项再循环,以为是Linq生成了新的对象实例导致修改失效,后来改成用continue跳过不符合条件的项,结果还是一样,应该不是实例的问题?
  3. 补充说明:我已经确认代码确实走到了赋值那一行,没有被continue跳过;另外这个场景其实不需要并发,但SaveSaleRequest是项目里通用的对象,其他业务场景需要用ConcurrentQueue,所以这里才沿用了这个类型。难道我必须先把队列转成List修改完再转回去吗?但总觉得没必要,是不是我哪里理解错了?

麻烦各位大佬帮忙看看问题出在哪里,谢谢了!

备注:内容来源于stack exchange,提问作者Jamie Hartnoll

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:29:10