155267102 发表于 2023-4-12 12:22:19

跌代的变通方式

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;//用这个可以避免系统报错
            }
            //看似双重循环,实则只有一个
      }




页: [1]
查看完整版本: 跌代的变通方式