The Loops in C#

原创 2005年06月01日 11:39:00

在C#中,有几种循环方式,do, while, for,foreach。好像foreach是用的比较少的一种,而其实从.net 1.1的版本以后,foreach循环是效率最高的一种。比如下面几个例子:

int [] foo = new int[100];

// Loop 1:
foreach ( int i in foo)
  Console.WriteLine( i.ToString( ));

// Loop 2:
for ( int index = 0;
  index < foo.Length;
  index++ )
  Console.WriteLine( foo[index].ToString( ));

// Loop 3:
int len = foo.Length;
for ( int index = 0;
  index < len;
  index++ )
  Console.WriteLine( foo[index].ToString( ));
有些人可能会觉得第三种是效率最高的,因为它把Length提到了循环体外。实际上在C#编译器产生的代码中,为了安全性,每次循环都要检查边界,所以即使你的代码把Length放在循环体外,编译器产生的代码仍然要在每次循环中检查Length的边界情况。而编译器可以自动为foreach语句产生最适合,最有效率的代码。

使用foreach还有一个好处是如果你改变了集合的类型,不会影响到其他的代码段,比如开始你用的是数组,后来又改成了ArrayList。如

果你用的是其他的循环方式,就必须修改相应的代码,而使用foreach就不会有这样的情况。
//int [] foo = new int[100];
ArrayList foo = new ArrayList( 100 );

int sum = 0;
for ( int index = 0;
  // won't compile: ArrayList uses Count, not Length
  index < foo.Length;
  index++ )
  // won't compile: foo[ index ] is object, not int.
  sum += foo[ index ];

Hangup in Phase-Lock Loops

  • 2017年09月21日 23:40
  • 561KB
  • 下载

Code::Blocks error: range-based 'for' loops are not allowed in C++98 mode

Code::Blocks error: range-based ‘for’ loops are not allowed in C++98 mode今天在LeetCode刷题的时候碰到了这个问题。 e...

Timing_Recovery_in_Digital_Subscriber_Loops

  • 2014年04月14日 08:46
  • 1.2MB
  • 下载

JavaScript探秘:for-in循环(for-in Loops)

for-in循环应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”。从技术上将,你可以使用for-in循环数组(因为JavaScript中数组也是对象),但这是不推荐的。因为如果数组...

fruity loops kick

  • 2012年11月29日 19:44
  • 271KB
  • 下载

ios run loops  测试用例

  • 2015年06月19日 14:03
  • 170KB
  • 下载

有关C#中in.Parse()和int.TryParse()的一点思考

毕设做的是一个.Net的横向项目。 由于数据库操作,和一些用户输入的判定,常要用字符串转整型变量的方法。 之前一直用int.Parse(string s),方便省事。 后来发现,当s为null,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:The Loops in C#
举报原因:
原因补充:

(最多只允许输入30个字)