Я всегда был смущен этим. Рассмотрим следующие циклы:NET loop целостность 101
int [] list = new int [] { 1, 2, 3 };
for (int i=0; i < list.Length; i++) { }
foreach (int i in list) { }
while (list.GetEnumerator().MoveNext()) { } // Yes, yes you wouldn't call GetEnumerator with the while. Actually never tried that.
- [Список] выше жестко закодирован. Если список был изменен внешне, когда цикл проходил через итерации, что произойдет?
- Что делать, если [list] является свойством readonly, например.
int List{get{return(new int [] {1,2,3});}}
? Будет ли это нарушать цикл. Если нет, создаст ли он новый экземпляр на каждой итерации?
Другое дело, что для массива свойство 'Length' равно неизменный. Если вы вызываете 'Length' в массиве и получаете определенное значение, все будущие вызовы' Length' для этого массива гарантированно возвращают одинаковое значение. Конечно, если у вас есть переменная экземпляра типа массива, и что-то изменяет эту переменную экземпляра на другой массив, длина этого массива может отличаться от предыдущей. – supercat