繁体   English   中英

为什么Class不断抛出“ MyClass的类型初始值设定项引发异常”。

[英]Why Class keeps throwing 'The type initializer for 'MyClass' threw an exception.'

我从一个项目的类中复制并粘贴了方法,然后将其全部粘贴到另一个项目的类中。 我四处搜寻,没有发现与这种情况会引发错误的原因完全相同或接近的问题。

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

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

这是因为类中static变量的初始化失败。

在此处阅读有关问题和解决方案的信息。

实际上,问题在于初始化顺序不能总是正确确定,这意味着SqlConnection cn可能首先被初始化,这将导致NullReferenceException因为还没有填写strCn

我基于有限的猜测是

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

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

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

ConfigurationManager.ConnectionStrings["DDB"].ConnectionString;

抛出NullReferenceException

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM