在C#中修改集合的模式是什么?

时间:2010-03-12 12:03:55

标签: c# iterator collections design-patterns enumerator

此类问题的模式(最佳实践)是什么 - 修改集合中的元素(值)?

条件:

  • 集合的大小未更改(没有元素被删除或添加)
  • 修改就位

在C ++中它很简单,很好,我只是通过一个集合迭代并更改了元素。但是在C#中迭代(使用枚举器)是只读操作(就C ++而言,只有const_iterator可用)。

那么,如何在C#中做到这一点?

示例:具有“1,2,3,4”修饰序列将其更改为“1,2,8,9”但不是“1,2,3”或“1,2,3,4”, 5" 。

2 个答案:

答案 0 :(得分:5)

通常你会选择索引:

for (int i = 0; i < foo.Length; i++)
{
    if (ShouldChange(foo[i]))
    {
        foo[i] = GetNewValue(i);
    }
}

更实用的替代方法是创建一个方法,该方法返回包含所需“修改”数据的 new 集合 - 这一切都取决于您想要做什么。

答案 1 :(得分:1)

实际上这取决于。 readonly部分适用于迭代器本身。如果要迭代对象集合,则可以通过引用更改对象的状态。

对于值类型的集合,您无法在迭代期间更改元素,但在这种情况下,您可以使用常规循环和索引器来运行元素。