C # foreach правило итерации для коллекций - PullRequest
3 голосов
/ 12 апреля 2011

Как .NET определяет порядок элементов при переборе коллекций?

Например:

list<string> myList = new List<string>();

myList.Add("a");
myList.Add("b");
myList.Add("c");

foreach (string item in myList)
{
    // What's the order of items? a -> b -> c ?
}

Мне нужен этот порядок (доступ к членам коллекции):

for (int i = 1; i < myList.Count; i++)
{
    string item = myList[i - 1]; // This is the order I need
}

Можно ли безопасно использовать foreach с List?А как насчет других типов коллекций?

Ответы [ 5 ]

4 голосов
/ 12 апреля 2011

.NET не решает это - класс, реализующий IEnumerable, решает, как это делается. Для List это от индекса 0 до последнего. Для Dictionary это зависит от значения хэша ключа, который я думаю.

List индексы основаны на 0, так что вы можете сделать это:

for (int i = 0; i < myList.Count; i++)
{
    string item = myList[i]; // This is the order I need
}

и тот же результат, что и foreach. Однако, если вы хотите быть откровенным, просто придерживайтесь цикла for. В этом нет ничего плохого.

2 голосов
/ 12 апреля 2011

Я полагаю, что foreach начинается с первого индекса и продолжается до последнего элемента в списке.

вы можете безопасно использовать foreach, хотя я думаю, что он немного медленнее, чем для i = 1; я <метод myList.count. </p>

Кроме того, я бы сказал, что вы обычно начинаете с индекса 0. Например:

for (int i = 0; i < myList.Count -1 ; i++)
{   
 string item = myList[i]; // This is the order I need
}
1 голос
/ 12 апреля 2011

Не волнуйтесь, используйте foreach.

list myList = new List();

myList.Add("a");
myList.Add("b");
myList.Add("c");

foreach (string item in myList)
{
    // It's in right order! a -> b -> c !
}
1 голос
/ 12 апреля 2011

foreach в порядке.Вы должны смотреть только на внутреннюю часть того, как работает цикл, если вы ищете производительность (например, числовая дробилка).

0 голосов
/ 12 апреля 2011

Общий список будет перечисляться в порядке добавления, как вы предлагаете.Другие реализации Enumerator могут отличаться, если это важно, вы можете рассмотреть SortedList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...