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

Dictionary リテラルの夢は儚く散った・・・訂正。散ってはいなかった

C#
using System;
using System.Collections.Generic;

namespace Dict
{
    class Dict
    {
        public delegate void KeyValue<K, V>(out K key, out V value);
        public static Dictionary<K, V> Create<K, V>(params KeyValue<K, V>[] kvs)
        {
            var result = new Dictionary<K, V>();
            foreach (var kv in kvs)
            {
                K key;
                V val;
                kv(out key, out val);
                result[key] = val;
            }
            return result;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            var dict = Dict.Create(
                (out string key, out int val) => { key = "hoge"; val = 0; },
                (out string key, out int val) => { key = "piyo"; val = 10; });
            foreach (var p in dict)
            {
                Console.WriteLine(p.ToString());
            }
        }
    }
}

これは・・・ないな。
KeyValue リテラルが欲しい!


追記:
Dictionaryリテラルっぽい何か - ((プログラミング | 形式) 言語) について書く日記
これは素晴らしい!
X のかわりに Is を使えば、

var dict = Dict.Create(
    "hoge".Is(0),
    "piyo".Is(10)
);

これはかなりいいんじゃないだろうか。


更に追記:
Dictionary の初期化 - 気楽に諸々
コレクションイニシャライザの存在をすっかり忘れてましたw
ただ、型パラメータを指定しないといけないのがだるいですね・・・