読者です 読者をやめる 読者になる 読者になる

Extension List.Map

C#

C# でこういうことできないんだっけ?

using System;
using System.Collections.Generic;
using System.Linq;

namespace CsConsole3
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> ls = new List<int>() {3, 1, 4};

            ls.ForEach(x => ++x); // 全要素に+1

            ls.ForEach(Console.WriteLine); // 3,1,4...書き換わらないな〜
        }
    }
}


試しに、全要素に対する操作を行うメソッドを作ってみた

using System;
using System.Collections.Generic;
using System.Linq;

namespace Shand.Extension
{
    public static partial class Extension
    {
        public static List<T> Map<T>(this List<T> source, Func<T, T> func)
        {
            List<T> result = new List<T>();

            foreach (T item in source)
            {
                result.Add(func(item));
            }

            return result;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using Shand.Extension;

namespace CsConsole3
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> ls = new List<int>() {3, 1, 4};

            ls = ls.Map(x => ++x); // 全要素に+1したリストを返す

            ls.ForEach(Console.WriteLine); // 4, 2, 6
        }
    }
}

と、ここまで作ったところで ConvertAll の存在を思い出した