【问题标题】:Why Class keeps throwing 'The type initializer for 'MyClass' threw an exception.'为什么 Class 不断抛出“'MyClass' 的类型初始值设定项引发了异常。”
【发布时间】:2014-02-15 04:30:25
【问题描述】:

我从一个项目的一个类中复制并粘贴了方法,然后将其全部粘贴到另一个项目的一个类中。我已经四处搜索,但没有找到完全或接近于为什么在这种情况下会引发错误的原因。

我确保命名空间与项目匹配,并且它一直在抛出

{"'MyClass' 的类型初始化器抛出异常。"}

然后我创建了另一个类并将其留空,当我创建它的对象时,页面加载没有问题。 只要我添加..

private static string strCn = ConfigurationManager.ConnectionStrings["DDB"].ConnectionString;
private static SqlConnection cn = new SqlConnection(strCn);

它抛出了错误,但如果我将其注释掉并添加一个公共变量和一个私有变量和一个方法

public int mynum = 1;
private static int num2 = 2;

它运行良好,但我使用过的任何其他时间

private static string strCn = ConfigurationManager.ConnectionStrings["DDB"].ConnectionString;
private static SqlConnection cn = new SqlConnection(strCn);

在我的任何课程中,它都运行良好。那么什么会导致这个问题呢?我什至手动输入了私有的sqlconnection和strCn,它会导致错误。无济于事。

【问题讨论】:

  • 请显示MyClass类的定义
  • 这种异常一般不会附有内部异常吗?
  • @Crono1981,内部异常 {"Object reference not set to an instance of an object."}
  • @pmacnaughton,我的意思是当我在我的其他项目中编写这种类型的类时,静态字符串和静态 sqlconnection 永远不会导致错误。我所做的只是创建了一个新项目并添加了一个新类,然后复制并粘贴了我将用于该项目的另一个项目中的一个类的内容。所以我认为答案是,不,它们不在同一个程序集中。
  • 那么这是您要查看的真正例外情况,以了解出现问题的信息。以后记住这一点。 :)

标签: c# asp.net


【解决方案1】:

我根据有限的猜测是这条线

private static string strCn = ConfigurationManager.ConnectionStrings["DDB"].ConnectionString;

正在抛出异常。

如果没有名为“DDB”的连接字符串,则可能会发生这种情况,因此 ConnectionStrings["DDB"] 返回 null,然后您尝试使用 .ConnectionString 取消引用。

尝试将strCn 的初始化移动到静态构造函数中,分解初始化步骤,并在调试器中单步执行。

public static
{ // Set a breakpoint here, and see what value is assigned to cfg.
    var cfg = ConfigurationManager.ConnectionStrings["DDB"];
    strCn = cfg.ConnectionString;
}

如果这是问题所在,我建议您保留静态构造函数,以便您可以验证连接字符串是否具有正确的值,如果不是,则进行适当的错误处理。

【讨论】:

  • 你是绝对正确的。我检查了我的 webconfig 并查看了字符串,它正在读取 DBB 而不是 DDB。更改后,它的工作完美。我承认,在我剪切和粘贴的过程中,我从来没有想过检查我的 webconfig 以确保名称是正确的
【解决方案2】:

那是因为你的类中static变量的初始化失败了。

阅读here 了解问题和解决方案。

其实问题是初始化的顺序不能总是正确确定,也就是说SqlConnection cn有可能先初始化,这会导致NullReferenceException,因为strCn不是'还没有填写。

【讨论】:

  • 不,它们保证在首次使用前被初始化。从您的链接:they are only constrained to occur before the references to those fields
【解决方案3】:

ConnectionStringSettingsCollection.Item(string) 如果没有找到具有给定名称的连接,则返回 null,因此

ConfigurationManager.ConnectionStrings["DDB"].ConnectionString;

抛出NullReferenceException

您需要修复配置以确保连接字符串存在。

【讨论】:

    猜你喜欢
    • 2011-05-22
    • 2012-09-06
    • 2014-01-23
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2012-09-01
    • 1970-01-01
    相关资源
    最近更新 更多