我已将集合初始化程序用于 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 出现在类中)?我错过了什么重要的东西吗?