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/