Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

無名関数とdelegate

誰か書いてるかも知れないけど。
C#でdelegate宣言、関数定義を無駄に書くのもめんどいのでこんなの書いた。

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{

    public class L0<K>
    {
        public delegate void Function(K o);

        private L0()
        {
        }

        public static Function Defun(Function func)
        {
            return func;
        }
    }

    public class L1<K, T>
    {
        public delegate K Function(T o);

        private L1()
        {
        }

        public static Function Defun(Function func)
        {
            return func;
        }
    }

    public class L2<K, V, T>
    {
        public delegate K Function(V v, T o);
        
        private L2()
        {
        }

        public static Function Defun(Function func)
        {
            return func;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            int init = 10;

            List<int> list = new List<int>();
            list.Add(1);
            list.Add(2);
            list.Add(3);
            list.Add(4);

            List<int> resultData = L2<List<int>, List<int>, L1<int, int>.Function>.Defun(
                delegate(List<int> lst, L1<int, int>.Function func)
                {
                    List<int> result = new List<int>();
                    foreach (int data in lst)
                    {
                        result.Add(func(data));
                    }
                    return result;
                }
            )(list, delegate(int data)
            {
                return data + init;
            });

        }
    }
}

無名関数で一息にmap関数を書ける。
C#はLLっぽく書けそうな気がするな。3.0ではそれが加速してると思う。
でもとりあえずこんなコード書くひとはクビだと思う。