for和foreach区别
1语法:for循环的语法比foreach循环更加灵活,可以控制循环的起始值、终止值和步长等参数。而foreach循环的语法比较简单,只需要指定要遍历的集合或数组即可。
2性能:在遍历数组时,for循环的性能比foreach循环更好,因为for循环直接使用数组的索引来访问元素,而foreach循环需要先获取迭代器,然后再通过迭代器来访问元素。
但在遍历集合时,foreach循环的性能比for循环更好,因为集合的元素数量可能会动态变化,而foreach循环可以自动适应集合的变化。
3可读性:foreach循环比for循环更易于理解和阅读,因为它的语法更加简洁明了,不需要关注循环的起始值、终止值和步长等参数。
上面是chatgpt给的答案,我觉得性能差不多,迭代器内部也是索引。
public class stringTest{ public static void Show(){ // var ss = new int[]{1,2,3,4}; // var iterator = ss.GetEnumerator(); // while(iterator.MoveNext()){ // System.Console.WriteLine(iterator.Current); // } Console.WriteLine("processing..."); int size = 300_000_000; List<int> arr = new List<int>(size); for (int i = 0; i < size; i++) arr.Add(i); var t1 = DateTime.Now; double sum1 = 0; for (int i = 0; i < arr.Count ; i++) sum1 += arr[i]; var t2 = DateTime.Now; double sum2 = 0; foreach (var v in arr) sum2 += v; var t3 = DateTime.Now; var iterator = arr.GetEnumerator(); double sum3 = 0; while(iterator.MoveNext()){ sum3 += iterator.Current; } var t4 = DateTime.Now; Console.WriteLine($"done.\nResult: sum1={sum1}, sum2={sum2}, sum3={sum3}"); Console.WriteLine($"time1: {t2 - t1}\ntime2: {t3 - t2}\ntime3: {t4 - t3}"); } }
结果是:
processing... done. Result: sum1=44999999767108860, sum2=44999999767108860, sum3=44999999767108860 time1: 00:00:01.5251589 time2: 00:00:01.3958917 time3: 00:00:01.4024989
我觉得只是写法上不一样,性能就这样吧,CLR也会对Foreach代码进行优化,这能差到哪去,foreach走的类似是链表循环,不用从头开始,速度稍微快点。环境是net core7.0.