投稿

2月, 2019の投稿を表示しています

C#で配列操作の可読性を高めるには

こんにちは。福岡事務所の荒平です。

私は前回LINQを使用し、ソースコードの可読性を高める記事を書きました。
今回も可読性に注意しながら「配列などの複数要素から特定の条件に一致する先頭要素」を取得する方法について説明していきたいと思います。

さて、いきなり質問ですが、皆さんは配列から特定の条件に一致する先頭要素を取得したいときどのようにして取得しますか?
・配列の中をfor文などのループで回して条件に合う要素が見つかればそれを取得してbreakする…
条件に合った要素を取得することはできますが、可読性の視点から見るともう少しスマートに書きたい…

そこで登場するのがLINQメソッドの「First」です。

■Firstとは

 配列などの複数要素のうち、先頭の要素(条件を指定した場合は条件に一致する最初の要素)を返すメソッド

 ◆基本的な書き方①
  value = 配列.First(条件);

  このように書くだけで配列の中から条件に合った最初の要素をvalueに入れることができます。

  しかし、条件に一致する要素が1つもない場合System.InvalidOperationExceptionの例外が発生してしまいますので、
  実際にはより汎用的な「FirstOrDefault」というメソッドを使います。

 ◆基本的な書き方②
  value = 配列.FirstOrDefault(条件);

  こちらは条件に一致する要素が1つもない場合は型のデフォルト値(0やnullなどデータ型ごとにdefault構文で取得できる値)を返します。


 ここまで配列から要素を取得することについて書きましたが、もちろん配列だけではなく「List」などのコレクションにも使えます。

■「Last」、「Single」メソッド

 ちなみに類似機能として「Last」、「Single」があります。
 (それぞれにXxxOrDefaultがあります)

 Firstが最初の要素を返すのに対し、Lastは最後の要素を返します。
 Singleは条件を満たす唯一の要素を返します。

 しかし、Singleについては唯一の情報を取得する目的に使われるメソッドなので、条件に一致する要素が複数あった場合、
 System.InvalidOperationExceptionの例外が発生します。
 これは「Sing…