Обновление: ложная тревога! Источник ошибки был в другом месте. (См. В конце вопроса.)
Возможно ли, что Linq или foreach могут испортить порядок массива?
Один из моих тестеров сообщил, что столкнулся с тем, что порядок списка элементов, которые он вводил в качестве входных данных, не соответствует порядку окончательного списка, который был сохранен в базе данных. Точнее, первый элемент стал последним.
Итак, я просмотрел свой код шаг за шагом, и я понятия не имею, что должно изменить порядок. Однако есть запрос Linq и цикл foreach. Возможно ли, что один из них может испортить порядок массива?
Код, упрощенный:
List<FooBar> fooBarList = new List<FooBar>();
string[][] theData = new string[][] {
new string[] { "a", "x" },
new string[] { "b", "y" },
new string[] { "c", "z" } };
FooBar[] fooBarArray = theData.Select(
row => new FooBar { Foo = row[0], Bar = row[1] }
).ToArray();
foreach (FooBar item in fooBarArray)
{
int iRank = fooBarList.Count + 1;
item.Ranking = iRank;
fooBarList.Add(item);
}
Массив массивов строк theData
фактически задается в качестве входных данных. Он превращается в массив бизнес-объектов. Затем они добавляются в список и им присваивается поле ранжирования. Это поле записывается в базу данных вместе с "Foo" и "Bar".
После сохранения списка в базе данных ранг «а» был 3 в этом конкретном случае. Однако я не могу воспроизвести недостойное поведение ...
Обновление: я ошибся, данные, записанные в базу данных, были правильные . Данные, которые я искал, были из бизнес-объекта, который был скопирован из оригинальный. При копировании порядок смешивался при чтении его из базы данных, и этот неправильный порядок затем сохранялся в копии объекта ... => Принято ответ Джона о том, что «LINQ to Objects обычно имеет предсказуемый порядок - другие поставщики часто нет. "