Основное различие между foreach
и using
состоит в том, что foreach
используется для перечисления по IEnumerable
, тогда как using
используется для определения области действия, за пределами которой будет располагаться объект.
Существует одно сходство между foreach
и using
: перечислители реализуют IDisposable
, и foreach
неявно обернет использование перечислителя в блоке using
. Другой способ сказать, что это то, что foreach
может быть перекодирован как блок использования, и результирующий IL будет идентичным.
Блок кода
var list = new List<int>() {1, 2, 3, 4, 5};
foreach(var i in list) {
Console.WriteLine(i);
}
фактически совпадает с
var list = new List<int>() {1, 2, 3, 4, 5};
using (var enumerator = list.GetEnumerator()) {
while (enumerator.MoveNext()) {
Console.WriteLine(enumerator.Current);
}
}