0

当我尝试引用另一个类中的静态变量时,我刚刚收到一个异常,该类也是静态初始化的。这以前有效,但由于某种原因它现在失败了。我所做的唯一更改是将 Visual Studio (2010) 重置为其默认设置,我无法想象这是造成这种情况的原因。我添加的任何其他代码也没有触及任何受影响的部分。

这是我的代码


WinForms 类'MainForm':

partial class MainForm : Form
{ 
    // ...

    private RefClass convMan;
    private Dictionary<EnumType, string> LogNames = RefClass.LogNames;

    // ...

   public MainForm() { .... }
}

引用类“RefClass”:

class RefClass
{
    // ...

    public enum EnumType { TypeOne = 0, TypeTwo = 1, TypeThree = 2 };

    public static Dictionary<EnumType, string> LogNames = new Dictionary<EnumType, string>()
    {
        { EnumType.TypeOne, "Text0" },
        { EnumType.TypeTwo, "Text1" },
        { EnumTypy.TypeThree, "Text2" }
    };

}

我现在得到的错误是(从德语翻译):

An unhandled exception of type "System.TypeInitializationException" occurred.

Additional information: The type initializer for "RefClass" threw an exception.

有 InnerException

System.ArgumentException

所以,就我而言,我的静态字典一旦被访问就应该被初始化,因此当我的 Form 类引用它时。我尝试调试以查看静态字典是否在 Form 类中被引用之前被初始化,但事实并非如此。此外,当我在参考线的断点处停止时,变量 LogNames 为空。

我真的很困惑为什么会发生这种情况,以前都有效。

4

2 回答 2

1

我发现了我的错误,但我得到的异常非常具有误导性。这是与我引用的字典不同的字典的问题。它可能一开始没有被初始化,因为在那之前的一些事情失败了(如果有人可以解决这个问题,请随时这样做!)。基本上我做错的是使用双向字典并添加两次值。这通常应该产生一个正常的异常,但由于它是静态完成的,它被包装到一个 TypeInitializationException 中。我深入研究了内部异常的确切堆栈跟踪,并找到了异常的来源。也许这对将来的某人有帮助......

于 2013-12-20T03:22:36.437 回答
0

我有一个类似的问题得到同样的例外。发现我的实用程序类的静态构造函数正在生成异常。由于异常的描述具有误导性,因此花了一些时间进行定位。

正如@Yeehaw 提到的,似乎异常被包装了,所以我要说的共同点是类/对象是静态的。

于 2016-10-19T15:39:59.170 回答