2017-04-18 18 views
4

私は辞書の辞書であるクラスにプライベートフィールドを持っています。辞書の辞書を削除する

private readonly Dictionary<string, Dictionary<int, int>> 
myDict = new Dictionary<string, Dictionary<int, int>>(); 

myDictのクリアに関するベストプラクティスは何ですか?すべての値をループしてを呼び出す必要がありますか?それぞれを呼び出してください。をクリアしても問題ありません。myDictに設定していますか?
私は最高のパフォーマンスも探しています。

+0

あなたのシナリオによって異なります –

+1

両方の辞書からすべてのレコードを消去し、空の辞書で作業するだけであれば、おそらく新しいインスタンスを作成します: 'myList = new Dictionary >(); '... – Fabjan

答えて

7

Clear()に電話すると、マスター辞書がクリアされます。これ以上内部辞書に参照がない場合、ガベージコレクタはそれらをクリーンアップしますので、Clear()を呼び出す必要はありません。それらがまだ参照されている場合は、まず無効な状態になる可能性があります。

+0

私はそれをリストと呼んでいません:)。私は質問のために名前を変更しました。 – Rami

+0

それからあなたの質問のリストを呼んではいけません。 –

+2

おそらく、最も効率的なのは、 'myList = new Dictionary (myList.Count);'を使うことです。 –

0

myListでクリアと呼ばれるようになりました。これが最良の方法です。

あなたのコードでは、myListが読み取り専用であることがわかりますが、消去できるかどうかを確認してください。

+0

'readonly'は、リンクされているインスタンスではなく、内容を変更することができないことを意味します。これは 'const'ではありません。 –

0

第2レベル辞書の(ポインタ)コピーをどこかに置いておくと、それらのすべてをクリアすることができます。メソッドの中にある "母"辞書や一時変数を介して直接アクセスするだけの場合は、遅かれ早かれガベージコレクタによって収集されますので、別々にClearを指定する必要はありません。