В чем разница между и foreach?

В чем основное отличие между циклами for и foreach?

В каких сценариях мы можем использовать for, а не foreach и наоборот.

Можно ли показать с помощью простой программы?

Оба кажутся мне одинаковыми. Я не могу отличить их.

Ответ 1

a for loop - это конструкция, которая говорит: "Выполняйте эту операцию n. times".

a foreach loop - это конструкция, которая говорит: "Выполняйте эту операцию против каждого значения/объекта в этом IEnumerable"

Ответ 2

Вы можете использовать foreach, если объект, который вы хотите перебрать, реализует интерфейс IEnumerable. Вам нужно использовать for, если вы можете получить доступ к объекту только по индексу.

Ответ 3

Я попробую ответить на это более общим подходом:

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, а не for (предполагая там некоторый индекс массива). В зависимости от внутренней организации данных foreach может быть намного быстрее, чем при использовании for с индексом (особенно при использовании связанных списков).

Ответ 4

Каждый дал вам правильный ответ в отношении foreach, т.е. это способ прокрутки элементов чего-то, реализующего IEnumerable.

С другой стороны, для гораздо более гибкого, чем то, что показано в других ответах. Фактически, for используется для выполнения блока операторов до тех пор, пока указанное условие является истинным.

Из документации Microsoft:

for (initialization; test; increment)
     statement

инициализация Необходимые. Выражение. Это выражение выполняется только один раз, прежде чем цикл будет выполнен.

тест Необходимые. Булевое выражение. Если проверка истинна, выполняется оператор. Если проверить, если 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);

Ответ 5

для цикла:

 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 ;
}

Ответ 6

foreach почти эквивалентен:

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

и для реализации шаблона, совместимого с foreach, необходимо предоставить класс, имеющий метод GetEnumerator(), который возвращает объект с MoveNext() метод, метод Reset() и свойство Current.

Действительно, вам не нужно реализовывать ни IEnumerable, ни IEnumerator.

Некоторые производные очки:

  • foreach не нужно знать длину коллекции, поэтому позволяет выполнять итерацию по "потоку" или по типу "производителя элементов".
  • foreach вызывает виртуальные методы на итераторе (большую часть времени), поэтому может работать хуже, чем for.

Ответ 7

foreach полезен, если у вас есть массив или другая коллекция данных, которая содержит IEnumerable. но для них можно использовать для элементов доступа массива, к которым можно получить доступ по их индексу.

Ответ 8

А для цикла полезно, когда вы заранее указали или определили, сколько раз вы хотите запустить цикл. Например, если вам нужно выполнить процесс для каждого дня недели, вы знаете, что хотите 7 циклов.

Цикл foreach - это когда вы хотите повторить процесс для всех частей коллекции или массива, но не важно конкретно, сколько раз цикл работает. Например, вы форматируете список любимых книг для пользователей. У каждого пользователя может быть разное количество книг или нет, и нам все равно, сколько он есть, мы просто хотим, чтобы цикл работал на всех них.

Ответ 9

Это зависит от того, что вы делаете и что вам нужно.

Если вы выполняете итерацию через набор элементов и не заботитесь о значениях индекса, то foreach более удобен, проще в написании и безопаснее: вы не можете ошибиться в количестве элементов.

Если вам нужно обрабатывать каждый второй элемент в коллекции, например, или обрабатывать их в обратном порядке, тогда цикл for является единственным практическим способом.

Самые большие различия заключаются в том, что цикл foreach обрабатывает экземпляр каждого элемента в коллекции по очереди, в то время как цикл for может работать с любыми данными и не ограничивается только элементами коллекции. Это означает, что цикл for может изменять коллекцию, которая является незаконной и приведет к ошибке в цикле foreach.

Подробнее см. в MSDN: foreach и для

Ответ 10

Основное различие между циклом for и foreach в С#, которое мы понимаем по его работе:

Цикл for:

  • Переменная цикла for всегда должна быть целым числом.
  • For Loop повторно выполняет оператор или блок операторов, пока указанное выражение не примет значение false.
  • В цикле for мы должны указать границу цикла (максимум или минимум). → Мы можем сказать, что это ограничение цикла for.

Цикл foreach:

  • В случае цикла foreach переменная цикла while будет такой же, как тип значений в массиве.

  • Оператор Foreach повторяет группу встроенных операторов для каждого элемента массива или коллекции объектов.

  • В цикле foreach вам не нужно указывать минимальные или максимальные границы цикла.--- > здесь мы можем сказать, что это преимущество для каждого цикла.

Ответ 11

простая разница между 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.

Ответ 12

Вы можете использовать foreach для простого массива, например

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

И вы можете использовать это, когда у вас есть 2D-массив

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

Ответ 13

Синтаксис

foreach выполняется быстро и просто. Синтаксис для немного сложнее, но также более гибкий.

foreach полезен при итерации всех элементов в коллекции. для полезен при итерации в целом или подмножестве элементов.

Итерационная переменная foreach, которая предоставляет каждый элемент коллекции, является READ-ONLY, поэтому мы не можем изменять элементы по мере их повторения. Используя синтаксис для, мы можем изменять элементы по мере необходимости.

Нижняя строка - используйте foreach, чтобы быстро перебрать все элементы в коллекции. Используйте для для итерации подмножества элементов коллекции или для изменения элементов по мере их повторения.

Ответ 14

Я предпочитаю цикл с точки зрения производительности. Foreach немного медленный, когда вы идете с большим количеством элементов.

Например: я проверил с 1 lakhs предмет, и я мог видеть небольшую разницу в производительности.

Ответ 15

Оператор foreach повторяет группу встроенных операторов для каждого элемента в массиве или коллекции объектов, которая реализует интерфейс System.Collections.IEnumerable или System.Collections.Generic.IEnumerable. Оператор foreach используется для итерации по коллекции для получения требуемой информации, но не может использоваться для добавления или удаления элементов из исходной коллекции, чтобы избежать непредсказуемых побочных эффектов. Если вам нужно добавить или удалить элементы из исходной коллекции, используйте цикл for.