Dictionary リテラルの夢は儚く散った・・・訂正。散ってはいなかった
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
ただ、型パラメータを指定しないといけないのがだるいですね・・・