unity 迭代器 迭代集合执行移除

这篇博客探讨了在Unity中使用ArrayList或List迭代执行移除操作时容易遇到的问题,并提供了两种解决方案:1) 使用IEnumerator迭代器进行移除;2) 通过for循环实现。博主分享了相关面试知识点,指出当直接在foreach循环中调用Remove方法时可能引发的错误,并给出了避免这种问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下内容借鉴了 以下大神的作品:
http://zhangzhanlei1988.iteye.com/blog/2024883
http://www.manew.com/thread-39776-1-1.html

ArrayList List 等迭代集合执行移除(remove) 操作容易犯错 解决这个问题有两种方式:
1,迭代器 IEnumerator 代码如下:


    private List<int> _testList = new List<int>(new int[] {1,2,3,4,5});
    void testList()
    {

        // foreach(var item in _testList)
        // {
        //  Debug.Log(item*item);
        // }
        IEnumerator<int> itList = GetEnumeratorTest();
        while(itList.MoveNext())
        {

            Debug.Log("GetEnumeratorTest a " + _testList.Count);
            if(3 == (int)itList.Current)
            {
                Debug.Log(itList.Current);
                _testList.Remove((int)itList.Current);
                 Debug.Log("GetEnumeratorTest c " + _testList.Count);
                 _testList.Add(6);
                  Debug.Log("GetEnumeratorTest d " + _testList.Count);
            }

            Debug.Log("GetEnumeratorTest b" + _testList.Count);
        }
        Debug.Log("_testList.GetEnumerator();");
        IEnumerator it = _testList.GetEnumerator();

        while(it.MoveNext())
        {
             Debug.Log(it.Current);

             Debug.Log("_testList " + _testList.Count);
        }
    }

    public IEnumerator<int> GetEnumeratorTest()
    {
         //此处应该for 不能使用foreach
        for(int item = 0 ;item < _testList.Count;item++)
        {
            yield return _testList[item];
        }


    }

2,for循环 这种方式不用代码大家也都知道

面试的时候很多公司都会问这个问题
例如下面的问题
下列代码在运行中会发生什么问题? 如何避免?
List Testlist = new List(new int[]{ 1,2,3,4,5 });
foreach (var item in TestList)
Console.Writeline(item * item);
TestList.Remove(item);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值