2016-12-20 7 views
1

辞書のすべての値を変更する必要があります。通常、ディクショナリを列挙しながらディクショナリを変更すると、例外がスローされます。この問題を回避するにはさまざまな方法がありますが、私が見てきた答えのすべてには、一時記憶域の割り当てが含まれています。例については、Editing dictionary values in a foreach loopを参照してください。割り当てなしで辞書の値を変更する

メモリを割り当てずにすべての値を変更したいと思います。カスタム構造体の列挙子を書くと、辞書のバージョンを無視した値は問題ありませんが、辞書の重要なメンバーはすべてプライベートなので、これは不可能です。

+0

「ConcurrentDictionary」を使用しない理由は何ですか?あなたの問題は本当に同時アクセスまたはメモリ割り当ての例外ですか? –

+1

あなたが提供したリンクは、辞書のKeys.ToList()を呼び出してそのリストを反復処理しても機能するはずだということを示しています...いいえ? –

+1

@IanMercer:質問は非常に不明ですが。私はOPが指している例外は、それを反復しながらコレクションを変更するものだと信じています。これは同時アクセスの問題ではありません。 –

答えて

3

ここでは、明確なパフォーマンスの最適化が行われていることは間違いありません。

コメントに記載した追加情報に基づいて、メモリをアップグレードしないと最善のアプローチのように聞こえるので、おそらくDictionary source codeを受け取り、新しいクラスを作成することになります具体的にはこの目的のために、versionフィールドをインクリメントしません。

+0

私はその結論を恐れていました。ライセンスの理由から参照元ではなく、.Net Core実装を指すようにリンクを更新するべきでしょう。 MS-RSLライセンスはソースを「参照する」以外のものをほとんど許さないのに対し、いくつかのルールに従えばMITライセンスは変更を許可します。 –

+0

完了。いい視点ね。 – StriplingWarrior

+0

最後に、このルートは非常にうまく機能しました。私はあなたがiteratingしながら、または反復しながらキーを削除する間にも値を置き換えて置き換えることができる辞書に終わった。 –

関連する問題