C#中foreach循环对比for循环的优势和劣势

发布时间 - 2026-01-11 03:12:22    点击率:

前言

循环语句为众多程序员们提供了很大的便利,有while、do...while、for和 foreach。而且foreach语句很简洁,但是它的优点不仅仅在于此,它的效率也是最高的。本文将详细给大家关于C#中foreach循环对比for循环的优势和劣势,下面话不多说了,来一起看看详细的介绍吧。

一、foreach循环的优势

C#支持foreach关键字,foreach在处理集合和数组相对于for存在以下几个优势:

1、foreach语句简洁

2、效率比for要高(C#是强类型检查,for循环对于数组访问的时候,要对索引的有效值进行检查)

3、不用关心数组的起始索引是几(因为有很多开发者是从其他语言转到C#的,有些语言的起始索引可能是1或者是0)

4、处理多维数组(不包括锯齿数组)更加的方便,代码如下:

int[,] nVisited ={
  {1,2,3},
  {4,5,6},
  {7,8,9}
};
// Use "for" to loop two-dimension array(使用for循环二维数组)
Console.WriteLine("User 'for' to loop two-dimension array");
for (int i = 0; i < nVisited.GetLength(0); i++)
 for (int j = 0; j < nVisited.GetLength(1); 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[3][];
nVisited[0] = new int[3] { 1, 2, 3 };
nVisited[1] = new int[3] { 4, 5, 6 };
nVisited[2] = new int[6] { 1, 2, 3, 4, 5, 6 };

//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 = { 1, 2, 3 };
ArrayList list = new ArrayList();
list.AddRange(val);
foreach (int item in list)//在循环语句中指定当前正在循环的元素的类型,不需要进行拆箱转换
{
Console.WriteLine((2*item));
}
Console.WriteLine();
for (int i = 0; i < list.Count; i++)
{
int item = (int)list[i];//for循环需要进行拆箱
Console.WriteLine(2 * 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、数组中的每一项必须与其他的项类型相等.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。


# for循环和foreach  # for循环与foreach  # c  # foreach  # 跳出循环  # C#中Foreach循环遍历的本质与枚举器详解  # C# 9.0新特性——扩展方法GetEnumerator支持foreach循环  # c#中list.FindAll与for循环的性能对比总结  # 浅谈C#中的for循环与foreach循环  # C# for循环的经典案例集锦  # C# winform循环播放多个视频  # C#使用for循环移除HTML标记  # c# for循环中创建线程执行问题  # 说了  # 多维  # 有效值  # 几个  # 就会  # 不需要  # 有很多  # 不多  # 两次  # 有一定  # 是从  # 转到  # 给大家  # 才可以  # 或者是  # 要对  # 这篇文章  # 就将  # 谢谢大家  # 相对于 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  javascript中闭包概念与用法深入理解  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  如何在IIS中配置站点IP、端口及主机头?  奇安信“盘古石”团队突破 iOS 26.1 提权  如何彻底删除建站之星生成的Banner?  EditPlus中的正则表达式实战(5)  Laravel怎么调用外部API_Laravel Http Client客户端使用  如何破解联通资金短缺导致的基站建设难题?  Laravel如何优化应用性能?(缓存和优化命令)  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  Laravel如何实现本地化和多语言支持?(i18n教程)  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  WordPress 子目录安装中正确处理脚本路径的完整指南  如何在服务器上三步完成建站并提升流量?  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  大连 网站制作,大连天途有线官网?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  jQuery 常见小例汇总  无锡营销型网站制作公司,无锡网选车牌流程?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Laravel怎么实现验证码(Captcha)功能  音乐网站服务器如何优化API响应速度?  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  Firefox Developer Edition开发者版本入口  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  JavaScript如何操作视频_媒体API怎么控制播放  Android okhttputils现在进度显示实例代码  如何确认建站备案号应放置的具体位置?  如何在搬瓦工VPS快速搭建网站?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  如何用低价快速搭建高质量网站?  手机网站制作与建设方案,手机网站如何建设?  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  如何撰写建站申请书?关键要点有哪些?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Bootstrap CSS布局之列表  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Windows Hello人脸识别突然无法使用