18

私はを持っておりList<Person>、代わりに、単純な処理のためにそれらをに変換しList<string>て、次のようにします。

List<Person> persons = GetPersonsBySeatOrder();
List<string> seatNames = persons.Select(x => x.Name).ToList();

Console.WriteLine("First in line: {0}", seatNames[0]);

.Select()LINQ to Objectsオブジェクトのステートメントは、リストメンバーの順序を変更しないことが保証されていますか?明示的な個別/グループ化/順序付けが追加されていないと仮定します

また、任意の.Where()条項が最初に使用された場合でも、相対的な順序を維持することが保証されていますか、それとも非反復フィルタリングを使用することがありますか?


フェルミンが上でコメントしたように、これは本質的に重複した質問です。stackoverflowを検索するための正しいキーワードを選択できませんでした

LINQによる順序の保持

4

3 に答える 3

2

現在の.Net実装では、このようなコードを使用しています。ただし、この実装が将来行われるという保証はありません。

private static IEnumerable<TResult> SelectIterator<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, int, TResult> selector)
{
  int index = -1;
  foreach (TSource source1 in source)
  {
    checked { ++index; }
    yield return selector(source1, index);
  }
}
于 2013-01-09T16:20:52.067 に答える
2

何よりも、基になるコレクションの型に依存します。HashSet から一貫性のない順序が得られる可能性がありますが、List は安全です。必要な順序付けが暗黙的に提供されている場合でも、必要な場合は明示的な順序付けを定義することをお勧めします。メソッド名から判断すると、そうしているようです。

于 2013-01-09T16:27:15.180 に答える