Linq には配列やリストの順序を反転させる Reverse
というメソッドがあります。
サンプル
var data = new int[]{ 0, 1, 2, 3, 4 };
var reverse = data.Reverse();
Console.WriteLine(string.Join(", ", data));
Console.WriteLine(string.Join(", ", reverse));
出力結果
0, 1, 2, 3, 4
4, 3, 2, 1, 0
List の場合
配列の場合は上記でいいのですが、リストの場合にはちょっと注意が必要です。
List にはもともと Reverse
というメソッドがあり、Linq より List のほうが優先して使用されるため、以下のコードはビルドに失敗します。
var data = new List<int>{ 0, 1, 2, 3, 4 };
// List の Reverse の戻り値は void なので以下はエラーになる
var reverse = data.Reverse();
以下に簡単な対策方法を載せます。
(他にもあれば教えてください。)
AsEnuemrable を使用する
IEnumerable
を返す AsEnumerable
を使用することで、Linq の Reverse
メソッドを適用することができます。
var data = new List<int>{ 0, 1, 2, 3, 4 };
var reverse = data.AsEnumerable().Reverse();
IList を使用する
IList
は List
のインターフェイスかと思ったら、実は Reverse
メソッドなどは定義されていないので、Linq の Reverse
が適用されます。
IList<int> data = new List<int>{ 0, 1, 2, 3, 4 };
var reverse = data.Reverse();
もちろん IList
以外の他のコレクションでも良いです。