C#实今后foreach中除去集合中的成分

List<string> str = new List<string>();
str.Add( "zs");
str.Add("ls");
str.Add( "ws" );
foreach(string s in str)
{
   str.Remove(s);
}

偶然我们在foreach中须要修改恐怕去除集合

不过那时却报如下错误:集合已修改;大概不可能实施枚举操作。

C# 1

实在大家简要达成以下就足以兑现那一个功用

直白上代码如下

    public class MyClass<T>
    {
        MyClassCollection<T> collection = new MyClassCollection<T>();
        public IEnumerator GetEnumerator()
        {
            return collection;
        }
        public void Remove(T t)
        {
            collection.Remove(t);
        }

        public void Add(T t)
        {
            collection.Add(t);
        }
    }

    public class MyClassCollection<T> : IEnumerator
    {
        List<T> list = new List<T>();
        public object current = null;
        Random rd = new Random();
        public object Current
        {
            get { return current; }
        }
        int icout = 0;
        public bool MoveNext()
        {
            if (icout >= list.Count)
            {
                return false;
            }
            else
            {
                current = list[icout];
                icout++;
                return true;
            }
        }

        public void Reset()
        {
            icout = 0;
        }

        public void Add(T t)
        {
            list.Add(t);
        }

        public void Remove(T t)
        {
            if (list.Contains(t))
            {
                if (list.IndexOf(t) <= icout)
                {
                    icout--;
                }
                list.Remove(t);
            }
        }
    }

    public class MyItem
    {
        public string id
        {
            get;
            set;
        }

        public int sex
        {
            get;
            set;
        }
        public string name
        {
            get;
            set;
        }

        public int age
        {
            get;
            set;
        }
    }

  然后我们一向调用一下测验下:

            MyClass<MyItem> myclass = new MyClass<MyItem>();
            //添加10条数据
            Random rd = new Random();
            for (int i = 0; i < 10; i++)
            {
                MyItem item = new MyItem();
                item.age = rd.Next(1, 80);
                item.id = rd.Next().ToString();
                item.name = "name" + rd.Next().ToString();
                item.sex = rd.Next(0, 1);
                myclass.Add(item);
            }

            foreach (MyItem item in myclass)
            {
                Console.WriteLine(item.name);
                myclass.Remove(item);
            }

            Console.Read();

  那段代码就是仿照10条数据 输出音信后一向删除

C# 2

C#,哈哈哈  是否很不难吗?当然要贯彻修改也许其余的作用也是看似的

此外IEnumerator接口中的  public  object Current 为引用类型 所以
即便那里MyItem假使改动为骨干项目标话肯定会产出拆箱装箱

只要 若是foreach中是主导项指标话就毫无用foreach了 即便要求考虑品质的话。

 源代码下载:https://files.cnblogs.com/files/devgis/TestIEnumerator.rar

相关文章