此类问题的模式(最佳实践)是什么 - 修改集合中的元素(值)?
条件:
在C ++中它很简单,很好,我只是通过一个集合迭代并更改了元素。但是在C#中迭代(使用枚举器)是只读操作(就C ++而言,只有const_iterator可用)。
那么,如何在C#中做到这一点?
示例:具有“1,2,3,4”修饰序列将其更改为“1,2,8,9”但不是“1,2,3”或“1,2,3,4”, 5" 。
答案 0 :(得分:5)
通常你会选择索引:
for (int i = 0; i < foo.Length; i++)
{
if (ShouldChange(foo[i]))
{
foo[i] = GetNewValue(i);
}
}
更实用的替代方法是创建一个方法,该方法返回包含所需“修改”数据的 new 集合 - 这一切都取决于您想要做什么。
答案 1 :(得分:1)
实际上这取决于。 readonly部分适用于迭代器本身。如果要迭代对象集合,则可以通过引用更改对象的状态。
对于值类型的集合,您无法在迭代期间更改元素,但在这种情况下,您可以使用常规循环和索引器来运行元素。