首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不添加数据的不可变列表

不添加数据的不可变列表
EN

Stack Overflow用户
提问于 2014-09-13 14:26:17
回答 5查看 5.5K关注 0票数 4

我使用的ImmutableList如下所示:

  • 使用Nuget引用包,下面是使用代码: 使用System.Collections.Immutable;私有ImmutableList immutableList = ImmutableList.Create();//写操作操作writeAction = (() => { Data writeData =新数据();//使用有效值填充数据类型immutableList.Add(writeData);});

上面的代码没有将任何数据添加到不可变列表中。它仍然是空的,我不知道为什么所有的数据都是有效的。类似的代码用于填充其他数据结构,如ConcurrentQueue和ConcurrentBag,并且工作良好。

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-09-13 14:32:13

顾名思义,列表是不可变的,即不能将项目添加到原始列表中。在MSDN链接的备注部分:

当您从不可变列表中添加或删除项目时,添加或删除的项目将生成原始列表的副本,而原始列表将保持不变。

还来自here的Add方法文档:

它返回一个新的不可变列表,其中添加了对象,如果它已经包含指定的对象,则返回当前列表。

Add将为您提供新的列表引用,并在其中添加项目(原始列表将保持不变):

代码语言:javascript
运行
复制
immutableList = immutableList.Add(writeData);
票数 20
EN

Stack Overflow用户

发布于 2014-09-13 14:32:44

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

当您从不可变列表中添加或删除项目时,添加或删除的项目将生成原始列表的副本,而原始列表将保持不变。

这意味着每次执行像Add这样的操作时,都不会更改原始列表,但是会返回带有Add元素的新列表。这意味着您需要使用这样的代码来获得正确的列表:

代码语言:javascript
运行
复制
immutableList = immutableList.Add(writeData); 

这让我觉得你是在错误的情况下使用它。

票数 4
EN

Stack Overflow用户

发布于 2022-10-25 15:51:45

创建你的正常名单..。将其转换为数组,使用该数组生成不可变的列表.这是我的片段

代码语言:javascript
运行
复制
        var result = csvReader.GetRecords<Data>().ToArray();
        return ImmutableList.Create<Data>(result);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25824158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档