2

にコレクション初期化子を使用し、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

4

0 に答える 0