День семидесятый. #ЗаметкиНаПолях
For Или Foreach в C#
Многие программисты до сих пор путаются, когда использовать цикл
Внутри цикла
Дело в том,
Кроме того, в общем случае
Подводя итог, когда вам нужна простота чтения кода, используйте
Источник: https://www.c-sharpcorner.com/article/for-vs-foreach-in-c-sharp/
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/