Fun Coding

学んだことを記録していきます!

【C#】リストの全要素を処理して変換する方法 まとめ

リストの全要素を処理し、別のリストに変換するメソッドは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