我应该使用 C# 中的什么只读、保留顺序的集合来支持枚举?

Pat*_*ski 5 c# readonly-collection

我对数据结构只有两个要求:

  • 只读,
  • 保留顺序(我想以特定顺序枚举它,总是)。

我知道这IReadOnlyList确实保留了秩序。我可以使用它,但我不需要索引。这意味着我应该使用IReadOnlyCollection. 不幸的是,我找不到它保持秩序的信息。

你知道吗?

Mic*_*ger 2

为了获得只读列表,您可以遵循不同的方法。

List<string> list = new List<string>();
IReadOnlyList<string> roList = list;
var roList1 = new ReadOnlyList(list);
Run Code Online (Sandbox Code Playgroud)

roListroList1都是只读的,但如果您知道其原始类型,roListList<string>可以对其进行强制转换并修改集合。因此,第二种选择是更好的选择。需要指出的IEnumerable<string>是, a 也是只读的,因为它不提供任何修改集合的方法(如果不将其转换为原始类型)。

对于第二个问题,我们可以说 anyList<T>保留了顺序。如果您不想提供查询列表的方法并使用OrderBy它,则不可能使用从 派生的类IEnumerable。这是因为扩展方法。尽管如此,列表实例中的顺序仍被保留,但您可以重新查询。这并不意味着原始列表被触及或修改。