Singleメソッドを使うことで単一の要素を返せる事を知った

LINQを使って書くときに結果が必ず1件になることが分かっているのに今まで

	var test = Enumerable.Range(1,10).Where(x => x == 5).Select(x => x);
	
	Console.Write(test[0]);

とSelectメソッドを利用した上で、配列としてアクセスしていたが、MSDNを見て(というかインテリセンスでそれっぽいのを見つけてMSDNにアクセスして確認して)いたらSingleメソッドというものを見つけた。
どうも要素が一つに限定される場合はSelectの代わりにSingleメソッドを利用する事で「要素が一つの配列」としてではなく、単一の要素とする結果になるらしい。
という事で、

	var test = Enumerable.Range(1,10).Where(x => x == 5).Single();
	
	Console.Write(test);

と書いてみたら配列ではなく単一のint型の変数としてアクセスすることができた。


ちゃんと、いろいろと試してみないといけないなぁと思った。

シーケンスの 1 つの特定の要素を返します。

追記:
コメント欄で教えて貰ったので、そちらを利用した場合のサンプルも作成してみました。


Singleメソッドの中に条件を記述できる。

	var test = Enumerable.Range(1,10).Single(x => x == 5);
	
	Console.Write(test);

明らかに、簡潔に記述できて楽ですね。
Whereであることを明示するか、Singleの中に記述するか迷うところではあります。


SignleOrDefaultメソッドを利用する。

シーケンスの 1 つの特定の要素を返します。そのような要素が見つからない場合は既定値を返します。

    var test = Enumerable.Range(1, 10).SingleOrDefault(x => x == 15);
    if (test == 0)
    {
        MessageBox.Show("存在しない。");
    }
    else
    {
        MessageBox.Show(test.ToString());

    }

こちらは、要素が存在しない時は、要素にあたる型の規定値を返します。
intの場合は0なので、上記のサンプルの場合0だったら要素が存在しなかったことになります。
0も範囲内に含まれているような状況だと判断に困りますが、Null許容型や参照型は規定値がNullなので、利用しやすいかもしれません。