C# foreach循环较for循环的优势与劣势
一、foreach循环的优势
C#支持foreach关键字,foreach在处理集合和数组相对于for存在以下几个优势:
1、foreach语句简洁
2、效率比for要高(C#是强类型检查,for循环对于数组访问的时候,要对索引的有效值进行检查)
3、不用关心数组的起始索引是几(因为有很多开发者是从其他语言转到C#的,有些语言的起始索引可能是1或者是0)
4、处理多维数组(不包括锯齿数组)更加的方便,代码如下:
int[,] nVisited ={
{,,},
{,,},
{,,}
};
// Use "for" to loop two-dimension array(使用for循环二维数组)
Console.WriteLine("User 'for' to loop two-dimension array");
for (int i = ; i < nVisited.GetLength(); i++)
for (int j = ; j < nVisited.GetLength(); j++)
Console.Write(nVisited[i, j]);
Console.WriteLine();
//Use "foreach" to loop two-dimension array(使用foreach循环二维数组)
Console.WriteLine("User 'foreach' to loop two-dimension array");
foreach (var item in nVisited)
Console.Write(item.ToString());

foreach只用一行代码就将所有元素循环了出来,而for循环则就需要很多行代码才可以.
注:foreach处理锯齿数组需进行两次foreach循环
int[][] nVisited = new int[][];
nVisited[] = new int[] { , , };
nVisited[] = new int[] { , , };
nVisited[] = new int[] { , , , , , }; //Use "foreach" to loop two-dimension array(使用foreach循环二维数组)
Console.WriteLine("User 'foreach' to loop two-dimension array");
foreach (var item in nVisited)
foreach (var val in item)
Console.WriteLine(val.ToString());

5、在类型转换方面foreach不用显示地进行类型转换
int[] val = { , , };
ArrayList list = new ArrayList();
list.AddRange(val);
foreach (int item in list)//在循环语句中指定当前正在循环的元素的类型,不需要进行拆箱转换
{
Console.WriteLine((*item));
}
Console.WriteLine();
for (int i = ; i < list.Count; i++)
{
int item = (int)list[i];//for循环需要进行拆箱
Console.WriteLine( * item);
}

6、当集合元素如List<T>等在使用foreach进行循环时,每循环完一个元素,就会释放对应的资源,代码如下:
using (IEnumerator<T> enumerator = collection.GetEnumerator())
{
while (enumerator.MoveNext())
{
this.Add(enumerator.Current);
}
}
二、foreach循环的劣势
1、上面说了foreach循环的时候会释放使用完的资源,所以会造成额外的gc开销,所以使用的时候,请酌情考虑
2、foreach也称为只读循环,所以再循环数组/集合的时候,无法对数组/集合进行修改。
3、数组中的每一项必须与其他的项类型相等.
C# foreach循环较for循环的优势与劣势的更多相关文章
- PHP foreach()跳出本次或当前循环与终止循环方法
PHPforeach()跳出本次或当前循环与终止循环方法 PHP中用foreach()循环中,想要在循环的时候,当满足某个条件时,想 $arr = array('a','b','c','d','e') ...
- js中循环对比(for循环,foreach,for in,for of ,map)
对空位的处理 for循环(不会忽略空位,标记undefined) var arr =[1,2,undefined,3,null,,7] for (let i=0;i<arr.length;i++ ...
- for循环、for-in、forEach、for-of四大循环
平时自己在写一些小栗子的时候,用到的基本上是for循环,因为在学专业课(C,C++,JAVA,...)的时候用的最多的就是for循环,不过for循环的效率也是比较高的. 但是for循环在写的时候,涉及 ...
- foreach(增强for循环)和for的区别
https://www.cnblogs.com/XiaojianGo/p/7471860.html 首先说一下foreach有的也叫增强for循环,foreach其实是for循环的一个特殊简化版. 再 ...
- Java 中的foreach(增强for循环)
foreach概述 增强for循环:底层使用的是送代器,使用for循环的格式,简化了送代器的书写,foreach是JDK1.5之后出现的新特性 使用增强for循环 遍历集合 /** * 遍历集合 * ...
- for循环,for…in循环,forEach循环的区别
for循环,for…in循环,forEach循环的区别for循环通关for循环,生成所有的索引下标for(var i = 0 ; i <= arr.length-1 ; i++){ 程序内容 } ...
- for循环,while循环,do while循环
for循环: for循环格式: for(初始化语句;判断条件语句;控制条件语句) { 循环体语句; } 例子:取五位数各个位数的练习 public static void main(String[] ...
- THINKPHP5 volist标签循环不能设置循环变量为$i
在thinkphp5的volist标签中不要用$i作为id,举个简单例子 控制器这样写 模板这样写 结果是 这很令人费解啊.然后换一个循环变量看看 循环正常了,看来这个id这里设置循环变量的时候 不能 ...
- Python3基础(1)Python介绍、Python2 与Python3、变量、用户输入、if...else和for循环、while循环、break与continue
---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ P ...
随机推荐
- django学习过程中知识点小结
创建项目:django-admin startproject mysite 该命令将会创建一个名为mysite的项目. mysite/ manage.py mysite/ __init__.py se ...
- 互联网级监控系统必备-时序数据库之Influxdb
时间序列数据库,简称时序数据库,Time Series Database,一个全新的领域,最大的特点就是每个条数据都带有Time列. 时序数据库到底能用到什么业务场景,答案是:监控系统. Baidu一 ...
- [Oracle]高水位标记(HWM)
(一)高水位标记(High Water Mark,HWM)的概念 所谓高水位标记,是指一个已经分配的段中,已经使用的空间与未使用的空间的分界线.在表的使用过程中,随着数据的不断增多(insert),H ...
- 关于Actionbar的那些事
咱们来说说有趣的Actionbar吧 Actionbar这个控件是3.0以后添加的,Google在13年的时候把它加入了v7包,现在第三方的Actionbarserlock基本没什么用了, 要兼容2. ...
- 一步一步学Vue (一)
vue应该是前端主流框架中的集成大成者,它吸取了knockout,angular,react设置avalon的经验,支持各种模式写法,入门很简单,从本章开始,会记录学习vue中的点点滴滴,以笔记的形式 ...
- Ambari安装之部署单节点集群
前期博客 大数据领域两大最主流集群管理工具Ambari和Cloudera Manger Ambari架构原理 Ambari安装之Ambari安装前准备(CentOS6.5)(一) Ambari安装之部 ...
- 禁用Ubuntu 15.04登录界面显示客人会话
在控制台打开如下配置文件,如果没有就自己创建一个: sudo vi /etc/lightdm/lightdm.conf 向文件中添加如下内容: [SeatDefaults] greeter-sessi ...
- 51nod_1677:treecnt
题目是求一棵n节点树中对于C(n,k)颗子树,每棵子树为在n个节点中选不同的k个节点作为树的边界点,这样的所有子树共包含多少条边. 问题可以转化一下,对每一条边,不同的子树中可能包含可能不包含这条边, ...
- HDU 6047 Maximum Sequence(线段树)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=6047 题目: Maximum Sequence Time Limit: 4000/2000 MS (J ...
- PHP中通过sqlsrv调用存储过程——成绩排名去除重复字段的数据行
培训考试项目中,需要实现考试成绩排名:排名参考项为分数(score降序).参加日期(attendtime升序).第几次参加考试(frequency升序):并且,每个用户只保留一条数据(pid). 考试 ...