集合初始值设定项和TypeInitializationException与IEnumerable

时间:2014-09-30 08:37:29

标签: c# dictionary ienumerable collection-initializer

我使用了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出现在类中)?我错过了一些重要的事情吗?

0 个答案:

没有答案