2011-01-18 55 views
0

の値を更新すると、値を更新しようとしている間にこのコードが例外をスローすると、最初の値のみが更新され、「コレクションが変更されたため列挙操作が実行されない可能性があります。 !!!!コレクションが変更されました。列挙操作が実行されないことがあります。ハッシュテーブル

 Hashtable hh = new Hashtable(); 
     hh.Add("val 1",null); 
     hh.Add("val 2", null); 

     foreach (string dd in hh.Keys) 
     { 
      hh[dd] = "some_value"; 
      // MessageBox.Show(dd.Value.ToString()); 
     } 

ハッシュテーブルまたは[key、value]のある同等の構造体の空の値を更新する必要がありますか?

答えて

1

foreachループでキーを列挙している間に無効な操作であるHashtableを変更しようとしているため、hh.Keysのコピーを作成する必要があります。

foreach (string dd in new List<object>(hh.Keys.Cast<object>())) 
{ 
    hh[dd] = "some_value"; 
    MessageBox.Show(dd); 
} 
+0

このコードを試してみてください私は、このエラー「System.Collections.ICollectionが」「キャスト」の定義が含まれていませんです! 、私はVS 2005を使用しています – user486848

+0

キャストは拡張メソッドです。 "using System.Linq;"を追加してみてください。より最新のバージョンの.NETを使用することができます。あなた自身でhh.Keys配列をコピーすることができる他の方法。 – sidon

関連する問題