リストの全要素を処理し、別のリストに変換するメソッドは2つあります。
方法 | メソッド名 |
---|---|
① |
ConvertAll |
② |
Select |
共通の仕様
・変換に成功する場合は変換されたリストを返す
・変換に失敗する場合はFormatExceptionが発生する
異なる仕様
方法 | メソッド名 |
計算方法 |
---|---|---|
① |
ConvertAll | 先行評価:即座に計算が行われる |
② |
Select | 遅延評価:値が必要になった時に計算が行われる |
遅延評価であるSelectを用いた方が計算回数やメモリが少なくなります。
例
コード
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<string>(); // リストに値を追加 list.Add("A"); list.Add("B"); list.Add("C"); // ConvertAllの場合 List<string> convertAllList1 = list.ConvertAll(n => n + "1"); List<bool> convertAllList2 = convertAllList1.ConvertAll(n => n.Contains("A")); Console.WriteLine("ConvertAll : " + string.Join(", ", convertAllList2)); // Selectの場合 IEnumerable<string> selectList1 = list.Select(n => n + "1"); IEnumerable<bool> selectList2 = selectList1.Select(n => n.Contains("A")); Console.WriteLine("Select : " + string.Join(", ", selectList2)); } } }
出力
ConvertAll : True, False, False Select : True, False, False