我使用了Dictionary
的收集初始化程序并收到了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出现在类中)?我错过了一些重要的事情吗?