プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2019/04/23

[C#] 並びを反転させる Reverse について

event_note2019/04/23 0:09

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 を使用する

IListList のインターフェイスかと思ったら、実は Reverse メソッドなどは定義されていないので、Linq の Reverse が適用されます。

IList<int> data = new List<int>{ 0, 1, 2, 3, 4 };
var reverse = data.Reverse();

もちろん IList 以外の他のコレクションでも良いです。