Dictionaryリテラルっぽい何か
(中略) 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 リテラルが欲しい!
http://d.hatena.ne.jp/bleis-tift/20090626/1246002896
C#はほとんど触ったことが無いのですが、もうちょっとDictionaryリテラルっぽくできるのではないかと思い、Genericな型に対する拡張メソッドを使ってちょっと書いてみました。Javaのstatic import相当があれば、もうちょっと綺麗な見た目にできるなあと思いました。
using System; using System.Collections.Generic; namespace Dict { public class KeyValue<K, V> { public K Key { get; private set; } public V Value { get; private set; } public KeyValue(K k, V v) { Key = k; Value = v; } } public static class Dict { public static KeyValue<K, V> X<K, V>(this K k, V v) { return new KeyValue<K, V>(k, v); } public static Dictionary<K, V> Create<K, V>(params KeyValue<K, V>[] kvs) { var result = new Dictionary<K, V>(); foreach (var kv in kvs) { result[kv.Key] = kv.Value; } return result; } } class Program { static void Main(string[] args) { var dict = Dict.Create( "hoge".X(0), "piyo".X(10) ); foreach (var p in dict) { Console.WriteLine(p.ToString()); } } } }