にコレクション初期化子を使用し、Dictionary
を受け取りましたTypeInitializationException
:
public static Dictionary<Environment.SpecialFolder, string> specialFolders = new Dictionary<Environment.SpecialFolder, string>
{
// ...
{Environment.SpecialFolder.MyDocuments, "abc"},
// ...
{Environment.SpecialFolder.Personal , "def"},
// ...
};
InnerException
、コールスタックなどの有用な情報がないため、混乱しています。そこで、問題を少し調べたところ、同じ値を持つ 2 つのキーがあることに気付きました。
IL に関しては、このコレクション初期化子の構文はDictionary.Add(...)
呼び出しに変換されるためAdd
、同じキーで 2 回呼び出しを行うと発生しますSystem.ArgumentException
(これは で予想される内部例外ですTypeInitializationException
)。したがって、元の質問に効果的に答えましたが、別の質問が出てきました。
最終的にコレクション初期化子が呼び出しに変換されたときに( IEnumerable を介してクラスに存在することが保証されていない) 、なぜクラスが実装IEnumerable
(およびしたがって提供IEnumerator
)する必要があるのですか? 私は何か重要なものを見逃していますか?Add