Blog ブログ

C# Unity LINQ入門 -Whereを実装してみる-

皆さんお久しぶりです。CCS吉村です。

最近少し涼しくなってきましたが、
季節の変わり目は体調を崩しやすいので、お気をつけを。。。

さて以前のブログでは LINQ について取り上げましたが
今回は Unity でどのように LINQ が実装されているのかという
観点から最終的にはどのように処理が行われているかを理解する為に
Where を自前で実装してみようと思います。

LINQ ってどうやって実装されているの?
まずは LINQ がどのように実装されているかを知る為に
拡張メソッドについて見ていきましょう。

拡張メソッドとは ・・・
拡張メソッドを使用すると、新規の派生型の作成、再コンパイル、
または元の型の変更を行うことなく既存の型にメソッドを “追加” できます。
 拡張メソッドは特別な種類の静的メソッドですが、拡張された型の
インスタンス メソッドのように呼び出します。
C# および Visual Basic で作成されたクライアント コードの場合は、
拡張メソッドの呼び出しと、型で実際に定義されたメソッドの呼び出しに
明確な違いはありません。
※以下より一部抜粋
https://msdn.microsoft.com/ja-jp/library/bb383977.aspx

簡単な例を交えて見てみましょう
説明だけではわかりにくいかと思いますので
実際に簡単な例を元に確認してみましょう。

string に “Hoge” と加えた文字列を返す拡張メソッドは以下のようになります。

Loading ….

上記の内容を踏まえ、LINQ は下記のように定義されています。

Loading ….

つまり IEnumerable 拡張メソッドとして実装されているという事がわかります。

Where の機能はフィルタリングなので、IEnumerable の拡張メソッドとして
条件に一致した IEnumerable を返す拡張メソッドを作成すれば良い訳です。

Loading ….

上記が実装したメソッドになります。
条件が一致した IEnumerable を返すようになっています。
実際に使用してみると

Loading ….

正しく条件にあった値のみが出力されているのがわかります。

いかがでしたでしょうか。今回は実際の例を踏まえ簡単に説明してみました。
LINQ がどのように実装されているかイメージする事は出来たでしょうか。

採用情報

クラウドクリエイティブスタジオではプログラマを募集しております。
ぜひ、一緒に面白いゲームを作りましょう!