8

昔は、次の例のように、中括弧を使用して可変コレクションを簡単に初期化できました。

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

BCL 不変コレクションで使用できる同様の構文はありますか? まだプレリリースであることは理解していますが、推奨される構文があるか、少なくともこの質問は、これらの便利な初期化子を実装するためのフィードバックとして役立ちます。

それまでの間、私が見つけた最短のものは次のとおりです。

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

1 に答える 1

10

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

私が知る限りではありません - 残念ながら、オブジェクトとコレクションの初期化子の両方が可変性に依存しています。Addそういう意味では、戻り値を持つメソッドがあればそれを中間値として使えるように言語が設計されていないのは残念です。(これは、オブジェクト初期化子でプロパティを設定する際には役に立ちません。気に留めておいてください。セマンティクスをより明確にするために名前Plusを付けることをお勧めします。)Add

あなたがすでに使用しているアプローチは、ショートカットに最も適していると思います。

それImmutableListは少し簡単です:

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

これはかなり単純です(そして型推論を可能にします)が、ImmutableDictionary. のオーバーロードがCreateありますが、IEnumerable<TKey, TValue>実装を構築することは、既に行っているように可変辞書を構築するのと同じくらい面倒です。

于 2013-06-02T11:16:14.070 に答える