您当前的位置: 首页 >  c#

Peter_Gao_

暂无认证

  • 1浏览

    0关注

    621博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C# foreach的用法

Peter_Gao_ 发布时间:2022-02-10 18:52:13 ,浏览量:1

 foreach是一种语法糖,用来简化对可枚举元素的遍历代码。而被遍历的类通过实现IEnumerable接口和一个相关的IEnumerator枚举器来实现遍历功能。

在foreach语句中有两个限制,第一不能修改枚举成员,其次不要对集合进行删除操作。也就是如下两种方式都是错误的。

        // Use "foreach" to loop an arraylist
        foreach( int i in arrInt )
        {
            i++;//Can't be compiled
            Debug.WriteLine( i.ToString() );
        }
 
        // Use "foreach" to loop an arraylist
        foreach( int i in arrInt )
        {
            arrInt.Remove( i );//It will generate error in run-time
            Debug.WriteLine( i.ToString() );
        }

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestForeach : MonoBehaviour
{
    void Start()
    {
        GoTestForeach();
    }

    private void GoTestForeach()
    {
        
        Debug.Log("start foreach 空数组的遍历"); 
        var array = new List();
        //注意区分:空数组是指元素个数为0,数组为空是指数组变量本身为null
        
        foreach(var item in array)
        {
            //这里数组array变量不为空,只是元素个数为0,在遍历时不会报空。
            Debug.Log(item);
        }

        //foreach语句中不能修改枚举成员
        var array2 = new List { "", "1", "2", "3" };
        foreach(var item in array2)
        {
            Debug.Log(item);
            array2.Remove("1");
            Debug.Log(item);
        }

    }

}

 那么对于如上两个操作,可以用for来实现,此外这里多说一句,就是对于一个记录集的多条数据删除问题,也是经常出现问题的地方(论坛上经常问类似的问题),由于在一些记录集中进行删除的时候,在删除操作之后相应的索引也发生了变化,这时候的删除要反过来进行删除,大致形式如下。

        // Use "for" to loop an arraylist
        for( int i = arrInt.Count - 1; i >=0; i-- )
        {
            int n = ( int ) arrInt[i];
            if( n == 5 )
                arrInt.RemoveAt( i ); // Remove data here
            Debug.WriteLine( n.ToString() );
        }
 

除了这两个地方外,foreach可以基本适用于任何循环  

IEnumerator , IEnumerable 枚举器接口_Peter_Gao_的博客-CSDN博客 https://blog.csdn.net/hc1104/article/details/8130818

关注
打赏
1664521772
查看更多评论
立即登录/注册

微信扫码登录

0.0366s