Настоящий Флеймер
Зарегистрирован: 21 February 2005
Сообщения: 1334
Примеры кода: 0
|
Re[3]: в каком порядке вытыскивает foreach |
23 January 2007 20:07 |
|
|
|
|
Здравствуйте, vadi, Вы писали:
V>>>Почему?? и что делать???
_FR>>Нельзя рассчитывать на какой-либо заранее известный порядок элементов в foreach. Даже если где-то он соблюдается.
V>Почему? Это спицифика foreach?
Я поторопился немного: в стандарте определён порядок foreach для массивов (одно- и много-размерных). Специфика в том, как контейнер (тот, в котором находятся перебираемые элементы) хранит элементы. Вот пример:
using System;
using System.Collections.Generic;
using System.Diagnostics;
class Program
{
static void Main() {
Stack<int> stack = new Stack<int>();
stack.Push(3);
stack.Push(2);
stack.Push(1);
foreach(object value in stack) {
Debug.WriteLine(value);
}//for
SortedList<int, object> list = new SortedList<int, object>();
list.Add(2, null);
list.Add(3, null);
list.Add(1, null);
foreach(object value in list) {
Debug.WriteLine(value);
}//for
}
}
В каждом из примеров возвращаемый порядок не совпадает с порядком добавления, но является более логичным.
Из-за этого-то порядок элементов не стандартизировали на уровне языка (кроме порядка обхода массивов). Он определяется контейнером. Но в документации к List<> я не нашёл упоминания этого момента. ... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Данное сообщение получено с сайта RSDN
|
|