|
C# 没有提供JAVA那样的跌代器,需要自己写。太不方便了
在几年的工作中,常常让人头痛。但一次偶然的机会,发现自己写的的一个循环删除的竟然没有报错。
现将其写下来与大家共享。
变通方式1。网上查找的方式
private void button1_Click(object sender, EventArgs e)
{
Dictionary<string, string> myDict = new Dictionary<string, string>
{
{ "1","a"},
{ "2","b"},
{ "3","c"},
{ "4","d"},
{ "5","e"}
};
foreach (var item in myDict.ToList()) //这个地方会增加内存开销,不建议采用
{
myDict.Remove(item.Key);// 在遍历时删除值
}
}
变通方式2。自己写的*********
private void button1_Click(object sender, EventArgs e)
{
Hashtable hash = new Hashtable();
hash.Add(1, "A");
hash.Add(2, "B");
hash.Add(3, "C");
hash.Add(4, "D");
for(int i=0;i<hash.Count-1;i++)//这个循环次数也会因remove而改变
foreach(int k in hash.Keys)
{
hash.Remove(k);
break;//用这个可以避免系统报错
}
//看似双重循环,实则只有一个
}
|
|