Ответ 1
Ваш вопрос касается List<T>
, который поддерживает порядок.
foreach, один, не гарантирует ничего. Он просто запрашивает объект, предоставленный для его счетчика, который мог бы сделать что угодно, возможно.
Сотрудник использовал цикл for для перебора списка в некотором коде С#, который он написал, и оставил комментарий: "did't use For Each, потому что я не был уверен, что он итерации по порядку. Кто знает, что сделает Microsoft". Например, предположим, что у нас есть список, подобный этому:
var someList = new List<string>();
someList.Add("one");
someList.Add("two");
someList.Add("three");
мой коллега использовал что-то вроде этого:
for (int i = 0; i < someList.Count; i++)
{
System.Diagnostics.Debug.WriteLine(someList[i]);
}
вместо этого:
foreach (var item in someList)
{
System.Diagnostics.Debug.WriteLine(item);
}
Я думаю, он боится, что предметы могут выйти в другом порядке, чем они были добавлены в коллекцию. Я думаю, что он немного параноик, но технически документация не указала порядок повторения итерации коллекции. Возможно ли, чтобы оператор foreach проходил массив или объект коллекции в любом порядке, отличном от нижнего предела до самого высокого?
Ваш вопрос касается List<T>
, который поддерживает порядок.
foreach, один, не гарантирует ничего. Он просто запрашивает объект, предоставленный для его счетчика, который мог бы сделать что угодно, возможно.
Это зависит от коллекции:
List<T>
он гарантирует, что будет порядок вставки. (Предположим, что только теги Add
, как показано. Если вы вставляете элементы в список в определенных местах, они будут возвращаться в нужном месте, как вы ожидали.) В основном это тот же порядок, что и вы, взяв list[0]
, list[1]
, list[2]
и т.д.Dictionary<TKey, TValue>
нет гарантированного упорядочения.SortedList<TKey, TValue>
(и т.п.) он будет в ключевом порядке сравнения - это точка типа.Чтобы ответить на вопрос, "foreach" возвращает порядок, возвращаемый. GetEnumerator(). Для списков это порядок, который вы добавили в конце. Для словарей это, вероятно, порядок ведер, где были назначены вещи.