問題タブ [collection-initializer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - ラムダ式のリストの初期化
ステート マシン クラスを設計しており、ラムダ式を使用して状態遷移オブジェクトを満たす条件を表現したいと考えています。新しい State Transition オブジェクトを作成するときに、次の状態に移行するかどうかを評価するために使用できる条件のリストも渡したいと思います。ただし、条件のリストの初期化に問題があります。これは、私が抱えている問題を示すサンプルの単純化されたコード例です。
List<Condition>({
と言っている行の中括弧) expected
の構文エラーと、閉じ括弧で別の構文エラーが発生しています
ここに何か愚かなものがあると確信していますが、あまりにも長い間それを見つめていて、それを見つけることができないようです. 何か考えはありますか?
c# - デフォルト値を持つオブジェクト初期化子内のコレクション初期化子
次の問題に出くわしました:
これが起こる理由を理解しています: AllowedIds = { 1, 2 }
は割り当てではなく、オブジェクト初期化子内のコレクション初期化子です。つまり、 の暗黙的な呼び出しですAllowedIds.Add(1); AllowedIds.Add(2)
。
それでも、割り当てのように見えるので、私にとっては落とし穴でした( を使用しているため=
)。
API/ライブラリ開発者 (私がクラスを開発しているとしましょう)として、最小の驚きの原則をSettings
守りたいと思っていますが、ライブラリの消費者がその罠に陥るのを防ぐためにできることはありますか?
脚注:
その特定のケースでは、 の
ISet/HashSet<int>
代わりに を使用できますICollection/List
(重複は には意味がないためAllowedIds
)1, 2
。それでも、初期化AllowedIds = { 2 }
すると直観に反する結果が得られ1, 2
ます。C# github repoで関連する議論を見つけました。基本的に、この構文は紛らわしいですが、これは古い機能 (2006 年に導入された) であり、後方互換性を壊すことなく変更することはできません。