2

我已将集合初始化程序用于 aDictionary并收到 a TypeInitializationException

public static Dictionary<Environment.SpecialFolder, string> specialFolders = new Dictionary<Environment.SpecialFolder, string>
{
    // ...
    {Environment.SpecialFolder.MyDocuments, "abc"},
    // ...
    {Environment.SpecialFolder.Personal   , "def"},
    // ...
};

由于没有有用的信息InnerException,例如调用堆栈或其他任何令人困惑的信息。所以我稍微调查了一下这个问题,并意识到有两个键具有相同的值。

关于 IL,这个集合初始化器语法被转换为Dictionary.Add(...)调用,因此Add使用相同的键调用两次引发System.ArgumentException(这是我在TypeInitializationException. 所以我有效地回答了我原来的问题,但又出现了另一个问题:

为什么类必须实现IEnumerable(并因此提供IEnumerator) - 旨在读取集合,而不是写入集合 - 当最终将集合初始化程序转换为Add调用时(不能保证通过 IEnumerable 出现在类中)?我错过了什么重要的东西吗?

4

0 回答 0