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