簡體   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