为什么Class继续抛出''MyClass'的类型初始化器引发了异常。

时间:2014-02-14 20:23:09

标签: c# asp.net

我从一个项目中复制并粘贴了一个类的方法,然后将它们全部粘贴到另一个项目的类中。我已经四处搜索,没有任何相关的内容完全或接近为什么在这种情况下它会抛出错误。

我确保命名空间与项目匹配,并且不断抛出

  

{“'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它会导致错误。无济于事。

3 个答案:

答案 0 :(得分:2)

这是因为您班级中static变量的初始化失败。

阅读有关问题和解决方案的here

实际上问题是初始化顺序不能总是正确确定,这意味着SqlConnection cn可能首先被初始化,这将导致NullReferenceException,因为{ {1}}尚未填写。

答案 1 :(得分:2)

我的猜测基于有限的是行

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;
}

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

答案 2 :(得分:1)

如果找不到与给定名称的连接,

ConnectionStringSettingsCollection.Item(string)将返回null,因此

ConfigurationManager.ConnectionStrings["DDB"].ConnectionString;

抛出NullReferenceException

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