2013-06-02 8 views
5

、我々は便利な次の例のように、括弧を使用して変更可能なコレクションを初期化することができます:中括弧を使用してBCL不変コレクションを初期化できますか?昔

var myDictionary = new Dictionary<string, decimal> {{"hello", 0m}, {"world", 1m}}; 

BCL不変コレクションで使用することができます似た構文がありますか?私はそれがまだプレリリースされていることを理解していますが、おそらく推奨される構文がある、または少なくともこの質問はこれらの便利なイニシャライザを実装するフィードバックとして役立つでしょう。平均時間で

、私が発見した最短は以下の通りです:

var myDictionary = new Dictionary<string, decimal> {{"hello", 0m}, {"world", 1m}}.ToImmutableDictionary(); 

答えて

7

BCL不変コレクションで使用することができます同様の構文はありますか?

ない限り、私は承知しているとして - 残念ながら、両方のオブジェクトとコレクション初期化子は無常にを依存しています。その点で、戻り値を持つAddメソッドが中間値として使用できるように、言語が設計されていないことは残念です。 (つまり、オブジェクト初期化子のプロパティを設定することを支援するあなたの心、と私はセマンティクスが明確にするためにAddに名前Plusを好むではないでしょう。)

を私はあなたがすでに使用しているアプローチは、のために最も適切なものだと思いますショートカット。 ImmutableListのために、それは少し簡単です

var list = ImmutableList.Create(1, 2, 3); 

かなりシンプル(と型推論が可能になります)ですが、私はImmutableDictionaryについても同様何も知りません。 CreateのオーバーロードはIEnumerable<TKey, TValue>ですが、実装の構築は、既に行っているように、変更可能な辞書を構築するだけのものではありません。

関連する問題