轉貼 型別初始值設定項引發異常

2022-10-10 22:12:18 字數 1608 閱讀 3701

型別初始值設定項引發異常

-上午開啟vs編譯程式的時候,突然出現了這個執行時錯誤「型別初始值設定項引發異常」。昨天還沒有這個錯誤呢,今天就突然出現,搞得我一頭霧水。上網搜了一下,發現有很多人遇到了這個問題。經過一番折騰解決了這個問題後,發現很多人都沒有意識到其癥結所在,於是寫這個隨筆,給大家點啟發,也給自己做個備忘。

症狀描述:

我的程式需要連線一台mq伺服器(其實就是個台式電腦,每天下班關機),如果伺服器沒有開,程式就會丟擲異常。以前編譯時老是忘開伺服器,經常會出現mq訪問失敗的異常。這次我原本以為也是這個異常,沒想到出來的是「型別初始值設定項引發異常」。

今天的錯誤為什麼會和以往不一樣呢?昨天臨下班時,把乙個類的單件模式做了重構,使用了靜態初始化方法。**如下:

private

static

readonly

workermanager instance 

=new

workermanager();

static

workermanager() 

private

workermanager()

public

static

workermanager instance

}訪問mq的語句在initialize方法裡,問題就應該出現在這裡了。

解決方法:

當然,把mq伺服器開啟問題就解決了,但是究竟為什麼會出現「型別初始值設定項引發異常」呢?

原來類的靜態成員在初始化時如果出現異常,訪問類的其它靜態成員或對該類進行初始化都會丟擲這個異常。請看下面的**:

public

class

test

}public

class

foo}在訪問test.test2以及new test()時都會丟擲這個異常。我的**中,由於initialize()出現異常,instance例項化失敗,所以訪問instance時就丟擲了這個異常。

總結:

typeinitializationexeption在msnd中的描述為:當類初始值設定項不能初始化型別時,將建立 typeinitializationexception 並向其傳遞由該型別的類初始值設定項引發的異常引用。

我們知道,型別初始化或者訪問型別的靜態成員時,都會對類中的其他靜態成員進行初始化,並執行靜態建構函式(如果有的話)。在這些過程中如果任一環節出現例如下面的**:

code

那麼產生typeinitializationexception的情況就包含以下幾種:

1. 訪問類的某一靜態成員,而其他靜態成員的初始化(或靜態建構函式中)產生異常。例如訪問classhelper.staticstring,由於靜態成員field的初始化產生異常,因此呼叫classhelper.staticstring會丟擲typeinitializationexception。

2. 訪問類的某一靜態成員,該靜態成員的初始化(或靜態建構函式中)產生異常。例如訪問classhelper.field。

3. 對該類進行初始化,而類中的某個靜態成員初始化(或靜態建構函式中)產生異常。例如classhelper helper = new classhelper()。

型別初始值設定項引發異常

連續兩天都為這個執行時錯誤 型別初始值設定項引發異常 而煩惱,除錯也不知道 出了問題。在王舒和陳雄學長的幫助下,哈哈,終於就解決啦!問題是這樣嘀 專案採用了三層架構和工廠模式,對專案新增引用的。1 web 引用 bll。2 bll 引用 idal,model,使用dalfactory建立例項。3 i...

c 型別初始值設定項引發異常

typeinitializationexeption在msnd中的描述為 當類初始值設定項不能初始化型別時,將建立 typeinitializationexception 並向其傳遞由該型別的類初始值設定項引發的異常引用。我們知道,型別初始化或者訪問型別的靜態成員時,都會對類中的其他靜態成員進行初始...

關於「型別初始值設定項引發異常」

今天在除錯程式時發現了乙個異常 型別初始值設定項引發異常 第一次發現。關於typeinitializationexception異常,msdn的解析 由類初始值設定項引發的異常周圍的包裝引發的異常。程式裡面的異常點是獲取單一例項物件是報的異常,百思不得其解。再仔細查一下發現單一例項物件為null,例...