gpt4 book ai didi

c# - 像 `ToArray` 和 `ToList` 这样的扩展方法是按引用还是按值操作的?

转载 作者:行者123 更新时间:2023-11-30 13:39:27 26 4
gpt4 key购买 nike

假设我在类里面有一本私有(private)字典或一个列表。我想返回一个只读枚举器,以便其他人可以遍历列表,但无权修改项目。

我不想围绕原始项目/元素创建包装类,而是想返回原始项目/元素的副本。会像original.ToList<Type>().GetEnumerator()吗?返回包含对原始项目的引用的列表,还是包含原始项目副本的列表?

我应该注意,我还需要索引(即按索引访问项目,但仍然无法修改它们)。

最佳答案

这些方法创建了一个新的集合实例,但项目引用仍将指向旧项目。换句话说,消费者无法更新您的内部集合,但他们可以自己更新项目。

假设您对修改项目进行了适当的封装,这种方法会奏效,但对于较大的列表来说它会占用一些内存,因为您需要为每个新项目引用分配内存。这就是为什么通常首选返回包装器的原因之一:它减少了包装器类的单个实例所需的额外内存。

关于c# - 像 `ToArray` 和 `ToList` 这样的扩展方法是按引用还是按值操作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11768194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com