在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循环有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

foreach 和 for 循环的区别

c#语言中,foreach循环语句,循环走到最后一层的条件怎么写?

对于一个遍历字符数组的循环,while(a[i])与for(i=0;a[i];i++)有啥区别??

foreach用法

C# 四种循环体的使用与区别

for循环与forEach循环的区别