开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 1887|回复: 0

[讨论] 跌代的变通方式

[复制链接]

0

精华

10

贡献

126

赞扬

关注 [开发者网] 微信公众号认证

帖子
7
软币
271
在线时间
14 小时
注册时间
2023-4-12
发表于 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;//用这个可以避免系统报错
            }
            //看似双重循环,实则只有一个
        }




回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-4-29 20:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表