在C#中for循环和foreach循环有啥区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C#中for循环和foreach循环有啥区别?相关的知识,希望对你有一定的参考价值。
说详细一点,或者举例子最好不过了~~~~~‘
给你讲4个循环当你想重复执行某些语句或语段时,依据当前不同的任务,C#提供4个不同的循环语句选择给你使用:
。for 语句
。foreach 语句
。while 语句
。do 语句
1.for
当你预先知道一个内含语句应要执行多少次时,for 语句特别有用。当条件为真时,常规语法允许重复地执行内含语句(和循环表达式):
for (初始化;条件;循环) 内含语句
请注意,初始化、条件和循环都是可选的。如果忽略了条件,你就可以产生一个死循环,要用到跳转语句(break 或goto)才能退出。
for (;;)
break; // 由于某些原因
另外一个重点是,你可以同时加入多条由逗号隔开的语句到for循环的所有三个参数。例如,你可以初始化两个变量、拥有三个条件语句,并重复4个变量。
2.foreach
已经在Visual Basic 语言中存在了很久的一个功能是,通过使用For Each 语句收集枚举。C#通过foreach 语句,也有一个用来收集枚举的命令:
foreach(表达式中的类型标识符) 内含语句
循环变量由类型和标识符声明,且表达式与收集相对应。循环变量代表循环正在为之运行的收集元素。
3.while
当你想执行一个内含语句0次或更多次时,while语句正是你所盼望的:
while (条件) 内含语句
条件语句——它也是一个布尔表达式 ——控制内含语句被执行的次数。你可以使用 break 和continue语句来控制while语句中的执行语句,它的运行方式同在for语句中的完全相同。
4,do
C#最后可利用的循环语句是do语句。它与while语句十分相似,仅当经过最初的循环之后,条件才被验证。
do
内含语句
while (条件);
do语句保证内含语句至少被执行过一次,而且只要条件求值等于真,它们继续被执行。通过使用break语句,你可以迫使运行退出 do 语块。如果你想跳过这一次循环,使用continue语句。 参考技术A 区别:
for 你先要给初值,末值和步长
foreach 不需要事先给定初值,末值和步长,他是自动遍历给定的集合体的所有值
string[] a=new string[]"a","b"
for(i=0;i<a.length;i++)
Response.write(a[i].ToString())
foreach(string b in a)
Response.write b
本回答被提问者采纳 参考技术B 索引方式的集合用for(因为for有个变量i)
除此之外用foreach,for无法完成的 参考技术C 区别:
for
你先要给初值,末值和步长
foreach
不需要事先给定初值,末值和步长,他是自动遍历给定的集合体的所有值
string[]
a=new
string[]"a","b"
for(i=0;i<a.length;i++)
Response.write(a[i].ToString())
foreach(string
b
in
a)
Response.write
b
参考技术D 区别:
for
你先要给初值,末值和步长
foreach
不需要事先给定初值,末值和步长,他是自动遍历给定的集合体的所有值
string[]
a=new
string[]"a","b"
for(i=0;i<a.length;i++)
Response.write(a[i].ToString())
foreach(string
b
in
a)
Response.write
b
这些 for 循环有啥区别?
【中文标题】这些 for 循环有啥区别?【英文标题】:What's the difference between these for loops?这些 for 循环有什么区别? 【发布时间】:2013-11-14 06:29:12 【问题描述】:这两个 for 循环有什么区别?我被告知不要在我的代码中使用第二个示例。我对此感到困惑,因为这在其他语言中不是问题。
那么这有什么区别/问题还是只是一种偏好?
//ex1
int i;
for(i = 0; i<whatever; i++)...code
//ex2
for(int i=0; i<whatever;i++)...code
【问题讨论】:
This 可能至少部分回答了您的问题:第二个不是有效的 C89。 出于好奇,谁告诉你不要使用第二个构造?这是一个非常糟糕的建议。 【参考方案1】:区别在于i
的作用域。
在第一个示例中,i
在循环之后的 AND 内具有范围。
在第二个示例中,i
在循环内具有范围。
第二个例子是 C99 和更高版本。
尽可能使用第二个示例,第一个示例在循环后需要 i
或编译器不支持 C99 时使用。
【讨论】:
【参考方案2】:C99 支持第二个,但 C89 不支持。区别在于范围和初始化点。范围由括号'确定。要理解我的意思:
int main()
int i=0;//-------------------------------------------------
// |
int i=1;//------------------------------------------ |
// | |
for(int i=2; i < 1; i++)//----------------- | |
//Declaring in loop works only in C99 | | | |
//----------------- | | |
int i=3;// | | | |
//----------------- | | |
//---------------------------------------- | |
// | |
//----------------------------------------------------- |
//---------------------------------------------------------
虚线表示块中不同i
的范围。
【讨论】:
【参考方案3】:i 变量的作用域不同。
在第二种情况下,变量范围是 for 循环本身。在第一种情况下,i 变量属于外部范围。
【讨论】:
【参考方案4】:经验法则:变量应尽可能在最紧范围内声明。
为什么?
考虑一个错字,您在 for 循环后插入 ;
:
int i;
for(i = 0; i<whatever; i++);
如果您在循环范围之外声明i
,您将不会收到错误,这比前一种情况要好。
但是
for(int i = 0; i<whatever; i++);
您会收到错误消息,因为i
在
的范围内是未知的。因此,最好尽可能在最紧凑的范围内声明变量。
【讨论】:
【参考方案5】:IIRC,第二个示例在 C89 和/或 C90 中无效,但在 C99 及更高版本中可用。除此之外的任何其他区别是 i
只能在第二个示例的循环内访问,其中第一个示例的 i
在外部范围内。
我总是使用第一个示例中的表格,因为程序变得更加一致和抗错误,无需我想太多。
【讨论】:
以上是关于在C#中for循环和foreach循环有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
c#语言中,foreach循环语句,循环走到最后一层的条件怎么写?