for和foreach有什么区别?

forforeach循环之间的主要区别是什么?

在哪些场景中我们可以使用而不是foreach ,反之亦然。

是否可以用简单的程序来展示?

两者对我来说都是一样的。 我无法区分它们。

for循环是一个构造,表示“执行此操作n。次 ”。

foreach循环是一个构造,表示“对此IEnumerable中的每个值/对象执行此操作”

如果要迭代的对象实现IEnumerable接口,则可以使用foreach 。 如果只能通过索引访问对象for则需要使用for

我会尝试用更通用的方法回答这个问题:

foreach用于以预定义的方式迭代给定集合或列表(任何实现IEnumerable任何元素)的每个元素。 您不能影响确切的顺序(跳过条目或取消整个循环除外),因为这是由容器决定的。

 foreach (String line in document) { // iterate through all elements of "document" as String objects Console.Write(line); // print the line } 

for是另一种编写循环的方法,该循环在进入循环之前执行代码,在每次迭代之后执行一次。 它通常用于循环代码给定次数。 与foreach相反,您可以影响当前位置。

 for (int i = 0, j = 0; i < 100 && j < 10; ++i) { // set i and j to 0, then loop as long as i is less than 100 or j is less than 10 and increase i after each iteration if (i % 8 == 0) { // skip all numbers that can be divided by 8 and count them in j ++j continue; } Console.Write(i); } Console.Write(j); 

如果可能且适用,请始终使用foreach而不是(假设有一些数组索引)。 根据内部数据组织, foreach可以比使用索引(特别是使用链接列表时)快得多。

每个人都给出了关于foreach的正确答案,即它是一种循环实现IEnumerable的元素的方法。

另一方面,因为它比其他答案中显示的更灵活。 实际上,只要指定的条件为真,for就用于执行语句块。

来自Microsoft文档:

 for (initialization; test; increment) statement 

初始化必需。 一种表达。 在执行循环之前,此表达式仅执行一次。

测试必需。 布尔表达式。 如果test为true,则执行语句。 如果测试为false,则循环终止。

增量必需。 一种表达。 递增表达式在每次循环结束时执行。

声明可选。 如果测试为真,则执行语句。 可以是复合语句。

这意味着您可以通过多种不同方式使用它。 经典学校示例是1到10之间的数字之和:

 int sum = 0; for (int i = 0; i <= 10; i++) sum = sum + i; 

但是你也可以使用它来对数组中的数字求和:

 int[] anArr = new int[] { 1, 1, 2, 3, 5, 8, 13, 21 }; int sum = 0; for (int i = 0; i < anArr.Length; i++) sum = sum + anArr[i]; 

(这也可以用foreach完成):

 int[] anArr = new int[] { 1, 1, 2, 3, 5, 8, 13, 21 }; int sum = 0; foreach (int anInt in anArr) sum = sum + anInt; 

但是你可以用它来表示从1到10的偶数:

 int sum = 0; for (int i = 0; i <= 10; i = i + 2) sum = sum + i; 

你甚至可以发明一些像这样的疯狂的东西:

 int i = 65; for (string s = string.Empty; s != "ABC"; s = s + Convert.ToChar(i++).ToString()) ; Console.WriteLine(s); 

for循环:

  1) need to specify the loop bounds( minimum or maximum). 2) executes a statement or a block of statements repeatedly until a specified expression evaluates to false. 

EX1: –

 int K = 0; for (int x = 1; x <= 9; x++){ k = k + x ; } 

foreach声明:

 1)do not need to specify the loop bounds minimum or maximum. 2)repeats a group of embedded statements for a)each element in an array or b) an object collection. 

EX2: -

 int k = 0; int[] tempArr = new int[] { 0, 2, 3, 8, 17 }; foreach (int i in tempArr){ k = k + i ; } 

如果您有一个数组或其他IEnumerable数据集合,foreach非常有用。 但是可以用于可以通过索引访问的数组的访问元素。

当您预先指示或确定循环运行的次数时,for循环非常有用。 例如,如果您需要为一周中的每一天执行一个过程,您就知道需要7个循环。

foreach循环是指您希望为集合或数组的所有部分重复进程,但具体并不重要的是循环运行的次数。 例如,您要为用户格式化collections书籍列表。 每个用户可能拥有不同数量的书籍,或者没有书籍,我们并不关心它有多少,我们只想让循环对所有书籍采取行动。

foreach几乎相当于:

 var enumerator = list.GetEnumerator(); var element; while(enumerator.MoveNext()){ element = enumerator.Current; } 

并且为了实现“foreach”兼容模式,需要提供一个具有GetEnumerator()方法的类,该方法返回一个具有MoveNext()方法, Reset()方法和Current属性的对象。

实际上,您既不需要实现IEnumerable也不需要实现IEnumerator。

这取决于你在做什么,以及你需要什么。

如果您正在迭代一组项目,并且不关心索引值,那么foreach更方便,更容易编写和更安全:您无法获得错误的项目数。

例如,如果您需要处理集合中的每个第二项,或者按相反的顺序处理它们,那么for循环是唯一可行的方法。

最大的区别在于foreach循环依次处理集合中每个元素的实例,而for循环可以处理任何数据,并且不仅限于集合元素。 这意味着for循环可以修改集合 – 这是非法的,并且会在foreach循环中导致错误

有关更多详细信息,请参阅MSDN: foreach和for

c#中for和foreach循环的主要区别在于它的工作原理:

for循环:

  1. for循环的变量始终只是整数。
  2. For循环重复执行语句或语句块,直到指定的表达式求值为false。
  3. 在for循环中,我们必须指定循环的边界(最大或最小).——–>我们可以说这是for循环的限制。

foreach循环:

  1. 在foreach循环的情况下,循环的变量与数组下的值的类型相同。

  2. Foreach语句为数组或对象集合中的每个元素重复一组嵌入式语句。

  3. 在foreach循环中,您不需要指定循环边界的最小值或最大值.—>这里我们可以说这是每个循环的优点。

for和foreach之间的简单区别

  for loop is working with values.it must have condition then increment and intialization also.you have to knowledge about 'how many times loop repeated'. foreach is working with objects and enumaretors. no need to knowledge how many times loop repeated. 

您可以将foreach用于简单的数组

 int[] test = { 0, 1, 2, 3, ...}; 

当你有一个2D数组时,你可以使用for

 int[][] test = {{1,2,3,4}, {5,2,6,5,8}}; 

foreach语法快速简便。 语法有点复杂,但也更灵活。

在迭代集合中的所有项时, foreach非常有用。 for在迭代整体或项目子集时非常有用。

提供每个集合项的foreach迭代变量是READ-ONLY,因此我们无法在迭代时修改这些项。 使用for语法,我们可以根据需要修改项目。

底线 – 使用foreach快速迭代集合中的所有项目。 用于迭代集合项的子集或在迭代时修改项。

foreach语句为数组中的每个元素或实现System.Collections.IEnumerable或System.Collections.Generic.IEnumerable接口的对象集合重复一组嵌入式语句。 foreach语句用于迭代集合以获取所需的信息,但不能用于在源集合中添加或删除项目以避免不可预测的副作用。 如果需要在源集合中添加或删除项目,请使用for循环。