当我在类上调用静态方法时,我得到TypeInitializationException的原因是什么?

时间:2012-02-09 10:48:03

标签: c# .net exception

我在公共类上有一个静态方法。例如:

public class MyClass {
 public static bool Test() { return true; }
}

我从另一个班级的单元测试中调用它:

MyClass.Test();

当调试器出现时,它抛出:TypeInitializationException:

  

{“'xxxxx.Yyyyy.MyClass'的类型初始值设定项引发了异常。”}

内部例外说:

  

{“值不能为空。\ r \ nParameter name:container”}

知道为什么会这样吗?

注意:这是控制台应用程序中的一个类 - 如果它很重要。

4 个答案:

答案 0 :(得分:8)

类型初始化期间发生异常时抛出TypeInitializationException(与该类型的实例相对)。

这通常意味着它是由静态构造函数中的异常或静态字段初始化引起的。

在尝试查找原因时要记住的一件重要事情是:一旦类型抛出此异常一次 - 它将始终在您尝试访问该类型时每次抛出它。这意味着要到达它的底部,你可能不得不追捕它首先抛出的地方,而不是随后抛出的地方。

[编辑:回复您更新的问题] 你能发布更完整的MyClass吗?当类型本身被初始化时它正在做某事,导致它抛出它。

答案 1 :(得分:2)

也许这会对您有所帮助:similar question

通常TypeInitializationException会隐藏可以通过InnerException查看的真实例外。如果这没有帮助,你应该考虑创建一个singleton,你可以更好地控制异常。

答案 2 :(得分:0)

过去我从躲躲闪闪的构建中得到了这些,尝试清理解决方案并重建。还要检查配置管理器以确保构建配置正确

答案 3 :(得分:0)

我花了一段时间才发现这个问题。我意识到我在静态方法中使用了一个包含两个相同定义的字典,从而导致错误。但是,这个内部异常被TypeInitializationException覆盖。我会尝试查看实际方法,看看代码中是否有任何错误。谢谢,

private static Dictionary<string, string> _dictionaryTest = new Dictionary<string, string>() {
    {"zzz", "zzzz"},
    {"zzz", "zzzz"},

}