次のコードはコンパイルが、NullReferenceException
で失敗します。C#辞書初期化子コンパイル矛盾
class Test
{
public Dictionary<string, string> Dictionary { get; set; }
}
static void Main(string[] args)
{
var x = new Test
{
Dictionary = // fails
{
{ "key", "value" }, { "key2", "value2" }
}
};
}
あなたがマークされた行を交換する場合は、次のように「失敗」(予想通り)、それが動作します:
Dictionary = new Dictionary<string, string>
失敗する構文の目的はありますか?それ以外の場合には正常に使用できますか?あるいはこれはコンパイラの見落としですか?
をそれはコンストラクタによって作成された辞書に項目を追加するために使用されています。しかし、それは辞書に既にあるものを追加することです(コンストラクタが最初に項目を追加した可能性があります)ので、equals演算子の奇妙な使い方です。 –
一種の、はい...しかし同時に、それはコレクションの初期値を設定するために使用されるので、そのように適合します。 –
右。欠落している 'new'は赤旗だったはずですが、この構文を一度も使用していなかったので、私はequals演算子を文字通り使いすぎました。 –