Если у меня есть Список со следующими записями:
Банановый виноград Apple Cherry оранжевый новозеландец
Результат
fruit.FindAll(f => f.Length == 6)
гарантируемый всегда быть
Банан оранжевая Cherry
или порядок мог отличаться?
Это не гарантируется в том смысле, что об этом не говорится в документации, однако, если вы посмотрите, как это в настоящее время реализовано, то да, оно всегда будет возвращаться в том же порядке.
Вот как это в настоящее время реализовано:
public List<T> FindAll(Predicate<T> match)
{
if (match == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
}
List<T> list = new List<T>();
for (int i = 0; i < this._size; i++)
{
if (match(this._items[i]))
{
list.Add(this._items[i]);
}
}
return list;
}
Как видите, это простой цикл for, который последовательно просматривает список и добавляет соответствующие элементы.
Текущая реализация сохранит порядок.
При этом в документации нет ничего, что гарантировало бы, что это всегда будет сохранять порядок. Возможно, что в будущей версии теоретически можно будет выполнить поток этой процедуры или какой-либо другой подобной функции, что нарушит порядок. Я бы не стал рассчитывать на сохранение порядка.
Существуют динамические счетчики, а также средства поиска объектов домена:
Hotel.countByCity(city)
Подробнее в руководстве пользователя , конечно
-121--2291423-Это не гарантировано в том смысле, что оно не говорит его в документации, однако если вы посмотрите, как он в настоящее время реализован, то да, он всегда вернется в том же порядке.
Вот как он в настоящее время реализован:
public List<T> FindAll(Predicate<T> match)
{
if (match == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
}
List<T> list = new List<T>();
for (int i = 0; i < this._size; i++)
{
if (match(this._items[i]))
{
list.Add(this._items[i]);
}
}
return list;
}
Как вы видите, это простой цикл для, который последовательно проходит через список, и добавляет предметов, которые соответствуют.
-121--4213325-Насколько я могу судить из документации List < T > .FindAll , порядок возвращаемого изделия не указан, поэтому если в настоящее время это деталь реализации, которая может быть изменена.
Короче говоря, да, порядок может быть другим.
MSDN сообщает, что выполняется линейный поиск, хотя явно не говорит о том, что он гарантированно будет в том же порядке.
В документации для List
явно не дается эта гарантия. Это намекает на то, что его заказывают. Что еще более важно, реализация метода действительно возвращает упорядоченный список, и мне трудно поверить, что каждый из них будет изменен на что-то еще. Это просто сломало бы слишком много людей. Отсутствие четких формулировок в документации, вероятно, по недосмотру.