gpt4 book ai didi

c# - 如何防止更改 IReadOnlyList

转载 作者:行者123 更新时间:2023-11-30 15:52:24 25 4
gpt4 key购买 nike

我需要使用 IReadOnlyList<T>作为返回参数,因为它最符合我的需要,但正如您在下面的示例中看到的,如果它不是真正只读的,您仍然可以修改它包装的列表。

using System.Collections.Generic;
using System.Collections.Immutable;

public class Test
{
public Test()
{
// return an IReadOnlyList that wraps a List, we can modify content
var list1 = GetList1();
if (list1 is List<Section> sections1) // can be true
{
sections1.Clear();
}

// return an IReadOnlyList that wraps an ImmutableArray, we cannot modify content
var list2 = GetList2();
if (list2 is List<Section> sections2) // never true
{
sections2.Clear();
}
}

public static IReadOnlyList<Section> GetList1()
{
return new List<Section> {new Section()};
}

public static IReadOnlyList<Section> GetList2()
{
return ImmutableArray.Create(new Section());
}
}

public struct Section
{
}

问题:

ImmutableArray<T>看起来很棒,因为它是真正只读的,唯一的事情是我不想/不需要公开返回 fully-featured class允许生成副本的更改。

因此我坚持返回IReadOnlyList<T>因为它的意图很简单,但我需要修复可能修改的列表问题。

问题:

正在返回 ImmutableArray<T>作为IReadOnlyList<T>是正确的方法吗?

如果没有,那么您能建议怎么做吗?

最佳答案

这不是怎么来的IReadOnlyList作品

IReadOnlyList Interface

The IReadOnlyList<T> represents a list in which the number and order of list elements is read-only. The content of list elements is not guaranteed to be read-only.

如果你想要一个 Immutable Collection查看

System.Collections.Immutable Namespace

The System.Collections.Immutable namespace contains interfaces and classes that define immutable collections.

关于c# - 如何防止更改 IReadOnlyList<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54703022/

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