リストの唯一の要素を取得するメソッドは2つあります。
方法 | メソッド名 |
---|---|
① |
Single |
② |
SingleOrDefault |
異なる仕様
方法 | メソッド名 |
該当する要素がない場合 |
---|---|---|
① |
Single | InvalidOperationExceptionが発生する |
② |
SingleOrDefault | リストの要素の型のデフォルト値を返す |
例
コード
using System; using System.Collections.Generic; using System.Linq; namespace Sample { /// <summary> /// メインプログラム /// </summary> public class Program { /// <summary> /// 方法の比較 /// </summary> static void Main() { // リストを生成 var list = new List<int>(); // リストに値を追加 list.Add(1); list.Add(2); list.Add(3); list.Add(4); list.Add(5); list.Add(6); int result1, result2; // 条件がない場合 /* result1 = list.Single(); */ /* result2 = list.SingleOrDefault(); */ Console.WriteLine("条件がない場合"); Console.WriteLine("Single : System.InvalidOperationException"); Console.WriteLine("SingleOrDefault : System.InvalidOperationException"); Console.WriteLine(); // 該当する要素がない場合 /* result1 = list.Single(n => n % 10 == 0); */ result2 = list.SingleOrDefault(n => n % 10 == 0); Console.WriteLine("該当する要素がない場合"); Console.WriteLine("Single : System.InvalidOperationException"); Console.WriteLine("SingleOrDefault : " + result2); Console.WriteLine(); // 該当する要素が単数の場合 result1 = list.Single(n => n % 5 == 0); result2 = list.SingleOrDefault(n => n % 5 == 0); Console.WriteLine("該当する要素が単数の場合"); Console.WriteLine("Single : " + result1); Console.WriteLine("SingleOrDefault : " + result2); Console.WriteLine(); // 該当する要素が複数の場合 /* result1 = list.Single(n => n % 2 == 0); */ /* result2 = list.SingleOrDefault(n => n % 2 == 0); */ Console.WriteLine("該当する要素が複数の場合"); Console.WriteLine("Single : System.InvalidOperationException"); Console.WriteLine("SingleOrDefault : System.InvalidOperationException"); Console.WriteLine(); } } }
出力
条件がない場合 Single : System.InvalidOperationException SingleOrDefault : System.InvalidOperationException 該当する要素がない場合 Single : System.InvalidOperationException SingleOrDefault : 0 該当する要素が単数の場合 Single : 5 SingleOrDefault : 5 該当する要素が複数の場合 Single : System.InvalidOperationException SingleOrDefault : System.InvalidOperationException