[英]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.