這種問題的模式(最佳實踐)是什麼 - 修改集合中的元素(值)?在C#中修改集合的模式是什麼
條件:
集合的- 尺寸未改變(不元素被刪除或添加)
- 修飾是就地
在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#中迭代(使用枚舉器)是隻讀操作(就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);
}
}
功能更強大的替代方案是創建返回新集合包含所需要的「修改」數據的方法 - 這一切都取決於什麼你想要做的。
所以它似乎在這裏C + +更靈活,謝謝你的答案。 – greenoldman 2010-03-12 12:43:10
其實這取決於。 readonly部分適用於迭代器本身。如果迭代一組對象,則可以通過引用更改對象的狀態。
對於值類型的集合,您不能在迭代過程中更改元素,但在這種情況下,您可以使用常規循環和索引器運行元素。
謝謝。第一句話只是部分是真的 - 你事先並不知道元素是不可變的。在收集它的類的情況下,是一個引用的集合 - 這種方式你必須改變引用。而枚舉器不會讓你這樣做。 – greenoldman 2010-03-12 12:46:54
@macias:迭代變量總是隻讀的。但是,如果它是引用,則可以修改它指向的實例,但不能更改引用本身。請參閱我的評論中的鏈接以瞭解您的問題。 – 2010-03-12 12:57:38
我完全理解 - 我的問題是如何(循環)看起來更好。在C++中它非常好,所以令人驚訝的是在C#中它看起來很醜。就這樣。 – greenoldman 2010-03-15 10:36:53
相關問題http://stackoverflow.com/questions/1538301 – 2010-03-12 12:17:43