技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

C#3.0 が何気に良い意味で気持ち悪い

C# 2.0でやってたものを思い出すと、
yield , 匿名 delegate ,Generics,イテレータ等がある。
実際にコードを書いてみる。

yield,Generics,イテレータ

namespace CSharp2
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] arr = new int[50];
            for (int i = 0; i < arr.Length; i++)
                arr[i] = i + 1;
            foreach (int k in mod2_list(arr))
                System.Console.WriteLine("mod2 value : {0}",k);
            /* この行はエラーになる。イテレータを配列には直せないらしい。 */
            int[] arr2 = (int[])mod2_list(arr);
            foreach (int k in arr2)
                System.Console.WriteLine("all of arr2 : {0}",k);
        }

        static IEnumerable<int> mod2_list(IEnumerable<int> values)
        {
            foreach (int val in values)
            {
                if (0 == (val % 2))
                    yield return val;
            }
        }
    }
}

yield でフィルタをかけてみた例。
int 程度では恩恵無いけど、複雑なオブジェクトだと恩恵あると思われ。

匿名delegate は以下の様なもの。

namespace delegateSample
{
    class Program
    {
        delegate int iDeliSample(int argi);
        static void Main(string[] args)
        {
            executeSomething(delegate(int s) { return s / 2; });
        }

        private static void executeSomething(iDeliSample method)
        {
            System.Console.WriteLine(method(52));
        }
    }
}

匿名関数みたいなもんだ。
こういう機能も便利なんだが、C#3.0 はもっとステキな機能があるらしい。
(次回に続く)