День семидесятый. #ЗаметкиНаПолях

For Или Foreach в C#

Многие программисты до сих пор путаются, когда использовать цикл for, а когда foreach. Рассмотрим перебор элементов коллекции в обоих циклах.

List<Employee> employees = GetEmployeesList();

Цикл for для списка будет выглядеть примерно так:

for (int i = 0; i < employees.Count; i++)

{

Console.WriteLine(employees[i].Age);

}

Заметьте, что вы можете напрямую обращаться к элементам списка по индексу.

Внутри цикла foreach вы можете напрямую обращаться к каждому элементу:

foreach(Employee emp in Employees)

{

Console.WriteLine(emp.Age);

}

Заметьте, что цикл foreach создаёт копию коллекции, по которой вы проходите. Это означает, что, если вы хотите выполнить операцию присваивания на элементе коллекции, вы не сможете этого сделать:

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

foreach (int item in numbers)

{

item++;

}

Этот код приводит к ошибке CS1656: Cannot assign to 'item' because it is a 'foreach iteration variable' (Невозможно выполнить присваивание переменной item, поскольку это ‘переменная итерации цикла foreach’).

Дело в том, item здесь не ссылается на элемент массива, это просто временная переменная, и вы не можете присваивать ей значения.

Кроме того, в общем случае foreach требует больше времени и дополнительную память, по сравнению с for, поскольку использует методы GetEnumarator() и Next() интерфейса IEnumarable.

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



Источник: https://www.c-sharpcorner.com/article/for-vs-foreach-in-c-sharp/