C# 不可变列表不添加数据

C# 不可变列表不添加数据,c#,.net,multithreading,C#,.net,Multithreading,我使用的不可变列表如下所示: 使用Nuget引用了包,下面是使用代码: using System.Collections.Immutable; private ImmutableList<Data> immutableList = ImmutableList.Create<Data>(); // Write Action Action writeAction = (() => { Data writeData = ne

我使用的不可变列表如下所示:

  • 使用Nuget引用了包,下面是使用代码:

    using System.Collections.Immutable;
    
    private ImmutableList<Data> immutableList = ImmutableList.Create<Data>();
    
    // Write Action
    
    Action writeAction = (() =>
            {
                Data writeData = new Data();
    
                // Fill Data type with valid values
    
                immutableList.Add(writeData);    
    
            });
    
    使用System.Collections.Immutable;
    私有ImmutableList ImmutableList=ImmutableList.Create();
    //写操作
    动作writeAction=(()=>
    {
    数据写入数据=新数据();
    //用有效值填充数据类型
    immutableList.Add(writeData);
    });
    
上面的代码没有向不可变列表添加任何数据。它仍然是空的,当所有数据都有效时,我无法找出原因。类似的代码用于填充其他数据结构,如ConcurrentQueue和ConcurrentBag,并且工作良好

我在使用不可变列表时是否遗漏了什么,是否需要更正?
请注意,这是一个多线程操作,但这不会成为问题,因为此数据结构是线程安全的。

因为名称建议列表是不可变的,即您不能将项目添加到原始列表中。在链接的备注部分:

从不可变列表中添加或删除项时 原始列表包含添加或删除的项目,以及 原来的名单没有改变


同样来自,添加方法文档:

它返回添加了对象的新不可变列表,或者返回当前列表(如果已添加) 已包含指定的对象

“添加”将获得新的列表引用,其中添加了项目(原始列表将保持不变):


不可变列表是一个不变的列表。以下是MSDN对其含义的描述:

在不可变列表中添加或删除项目时,原始列表的副本将与添加或删除的项目一起创建,而原始列表将保持不变

这意味着每次执行像Add这样的操作时,原始列表不会更改,但会返回添加了元素的新列表。这意味着您需要使用如下代码才能获得正确的列表:

immutableList = immutableList.Add(writeData); 

这让我觉得您在错误的场景中使用了它。

ImmutableList ImmutableList=ImmutableList.Create(“data1”、“data2”)


这对我来说非常有效。

writeAction从何处调用?谢谢,我完全忽略了基本部分,这种行为与字符串的行为相同
immutableList = immutableList.Add(writeData);