C# 3.0 における疑似 Map 生成リテラル

に触発されてコードを書いてみました。

というかJavaコードを移植した程度なんですけどね…。

もとのコードはこちら

Java Map literals, continued - Nicolas Lehuen’s Weblog

最近はListやMapの使い勝手が良く使用頻度も激増な私ですが、配列のように生成子での初期化が手軽に出来ないのが悩みです。

上記リンクのように「手軽に生成したい」と考える人は多そうなので.NET版に移植してみました。

を読んで mayuki さんが先日書いていた『Perl とかみたいな書式で Dictionary を初期化したい。 』を思い出す.
以下 mayuki さんバージョンを微妙に改変版.

using System;
using System.Linq;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        var dict = Dictionary
        (
            x => "foo",
            y => "bar",
            Hauhau => "gaogao"
        );

        var dict2 = new Dictionary<String, String>()
        {
            {"x", "foo"},
            {"y", "bar"},
            {"Hauhau", "gaogao"}
        };

        Debug.Assert(Enumerable.SequenceEqual(dict, dict2));
    }
    static Dictionary<String, T> Dictionary<T>(params Expression<Func<Object, T>>[] exprs)
    {
        return exprs.ToDictionary(expr => expr.Parameters[0].Name,
                                  expr => expr.Compile().Invoke(null));
    }
}