C# 中修改集合的模式是什么
这种问题的模式(最佳实践)是什么——修改集合中的元素(值)?
条件:
- 集合的大小未更改(没有删除或添加元素)
- 修改就地
在 C++ 中,这很简单又很好,我只是迭代了一个集合并更改了元素。但在 C# 中,迭代(使用枚举器)是只读操作(就 C++ 而言,只有 const_iterator 可用)。
那么,如何在 C# 中做到这一点呢?
示例:具有“1,2,3,4”修饰的序列将其更改为“1,2,8,9”,但不是“1,2,3”或“1,2,3,4,5”。
What is the pattern (best practice) for such problem -- modifying elements (values) in collection?
Conditions:
- size of the collection is not changed (no element is deleted or added)
- modification is in-place
In C++ it was easy and nice, I just iterated trough a collection and changed the elements. But in C# iterating (using enumerator) is read-only operation (speaking in terms of C++, only const_iterator is available).
So, how to do this in C#?
Example: having sequence of "1,2,3,4" modification is changing it to "1, 2, 8, 9" but not "1, 2, 3" or "1, 2, 3, 4, 5".
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
通常您会使用索引:
更实用的替代方法是创建一个方法,该方法返回一个新集合,其中包含所需的“修改”数据 - 这完全取决于您想要执行的操作。
Typically you'd go by index instead:
A more functional alternative is to create a method which returns a new collection which contains the desired "modified" data - it all depends on what you want to do though.
其实这要看情况。只读部分适用于迭代器本身。如果您要迭代对象集合,则可以通过引用更改对象的状态。
对于值类型的集合,您无法在迭代期间更改元素,但在这种情况下,您可以使用常规循环和索引器遍历元素。
Actually that depends. The readonly part applies to the iterator itself. If you're iterating a collection of objects, you can change the state of the objects via the reference.
For a collection of value types, you cannot change the elements during iteration, but in that case you can run through the elements using a regular loop and an indexer.