c# for 和 foreach 的区别

foreach

能够进行foreach的类型结构,都必须实现IEnumerable接口。

IEnumerable接口,有一个GetEnumerator的方法,返回一个实现IEnumerator接口的对象。
IEnumerator接口,有Current只读属性,MoveNext方法,Reset方法。

第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给a,

以后每次再执行 var a in GetList() 的时候 调用 MoveNext.直到循环结束.

期间GetList()方法只执行一次.

比如类型结构 TestForeach 一个对象tf ,在进行foreach的时候,比如如下:

1 foreach(var a in tf)
2 {
3   console.writeLine(a.toString());
4 }

程序运行到var a in tf时,实际上,调用了TestForeach的GetEnumerator()方法,返回一个a,当运行完console.writeLine(a.toString());后,继续运行 var a in tf,其实是调用了 上一次的a.MoveNext()放法,直到a.MoveNext=false foreach运行完毕。

for
for 循环靠下标定位.    list[3] 相当于 *(list + 3).

for(int i = 0; i < GetCount(); i++){  ....}

=

int i = 0;

while(i < GetCount()){  ...}

for 循环每次循环会调用 GetCount() 来比较长度. 而 foreach 不考虑长度,只调用一次GetList().

结论.

在固定长度或长度不需要计算的时候for循环效率高于foreach.

在不确定长度,或计算长度有性能损耗的时候,用foreach比较方便.

并且foreach的时候会锁定集合中的对象.期间不能修改.

时间: 2024-10-11 02:46:54

c# for 和 foreach 的区别的相关文章

.NET for 和 foreach的区别

我们知道If,Else,For,While,Switch,变量等等都是面向过程中的基础知识,本篇文章主要就讲讲.NET 中For和Foreach之间的区别: -- For循环主要是有条件地进行遍历数据并筛选符合条件的数据. -- Foreach循环主要是一次性地遍历数据. 注:两种循环方式有好有坏,在不同的场景采用不同的循环方式,因人而异. 以下就简单列举个例子解析两种循环的差异: //主要的运行环境是VS2010,以控制台为例. //For循环的例子 //定义字符串数组 string[] st

Javascript/Jquery 中each() 和forEach()的区别

从名字看上去这两个方法好像有点关系,但在javascript中它们区别还是挺大的. forEach() 用于数组的操作,对数组中的每个元素执行制定的函数(不是数组不能使用forEach()方法). 而$.each() 是JQuery中的方法,用于对集合中的每个匹配元素执行制定的函数.此外,它们所对应的回调函数中的参数也不一样:Array.forEach(item,index,array1);$(selector).each(function(index,element)). 下面是$.each(

JavaScript中Map和ForEach的区别

译者按: 惯用Haskell的我更爱map. 原文: JavaScript?-?Map vs. ForEach - What's the difference between Map and ForEach in JavaScript? 译者: Fundebug 为了保证可读性,本文采用意译而非直译.另外,本文版权归原作者所有,翻译仅用于学习. 如果你已经有使用JavaScript的经验,你可能已经知道这两个看似相同的方法:Array.prototype.map()和Array.prototyp

js forEach for区别

1.循环中断差别 具体见示例代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-U

C#基础之------for与foreach的区别

我们在数组的遍历中通常用到for循环. 例子: // for语句的遍历输出使用1 string [] names={"熊猫","狐狸","美人鱼"}; 2 3 for(int i=0;i<names.Length;i++) 4 { 5 string s1=names[i]; 6 Console.WritleLine(str); 7 } 8 9 Console.ReadKey(); 在C#里面还有另外一种遍历循环输出方法:foreach fo

for循环与foreach的区别

foreach 依赖 IEnumerable. 第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给a, 以后每次再执行 var a in GetList() 的时候 调用 MoveNext.直到循环结束. 期间GetList()方法只执行一次. 1 2 3 4 5 6 7 8 9 10 11 12 13 foreach   (var a in GetList()) {     ... } = var a; IEnumerator  e 

for 与forEach的区别

for循环 for循环,通过下标,对循环中的代码反复执行,功能强大,可以通过index取得元素.在处理比较复杂的处理的时候较为方便. foreach循环 foreach,从头到尾,对于集合中的对象遍历.适用于简单的遍历.foreach使用的时候,会锁定集合的对象,期间不能进行修改. 使用的选择 foreach相对于for循环,代码减少了,但是foreach依赖IEnumerable.在运行的时候效率低于for循环.当然了,在处理不确定循环次数的循环,或者循环次数需要计算的情况下.使用foreac

PHP for和foreach的区别

首先,我们先准备两个用于遍历的数组: $arr1=array(1=>'a', 3=>22, 5=>'b', 4=>'c', 8=>'d'); $arr2=array('a'=>'aaa', 'b'=>'bbb', 'c'=>'ccc', 'd'=>'ddd', 'e'=>'eee'); 一:for循环结构 循环1: for($i=0,$num=count($arr1);$i<$num;$i++){ echo $arr1[$i].' '; }

foreachRDD,foreach,foreachPartition区别联系

foreachRDD(SparkStreaming): SparkStreaming是流式实时处理数据,就是将数据流按照定义的时间进行分割(就是"批处理").每一个时间段内处理到的都是一个RDD.而SparkStreaming中的foreachRDD方法就是在处理每一个时间段内的RDD数据. DStream中即使有foreachRDD算子也不会立即进行处理,只有foreach(func)函数func中存在action算子才会执行foreachRDD算子运算,所有foreachRDD的函