C 關注異常處理

2021-06-07 21:10:00 字數 2181 閱讀 2068

for (int i = 0; i <= 2; i++)

tryint number = convert.toint32("aa");

catch (exception ex)

throw new myuserexception(ex.message);

myuserexception是自定義的異常類,把異常資訊記入到異常文字error.txt

public class myuserexception : exception

private string messageinfo = string.empty;

public myuserexception(string message)

: base(message)

messageinfo = message;

operateexception(message);

private void operateexception(string message)

string path = directory.getcurrentdirectory() + @"\error.txt";

if (file.exists(path))

filestream nfile = new filestream(path, filemode.open);

streamwriter sw = new streamwriter(nfile);

sw.writeline(message);

sw.close();

這是乙個很常見的異常捕捉,但是如此的丟擲異常並同時寫入異常文字後,程式會終止。我們也可以在catch中不用丟擲異常,也可寫乙個異常操作類,專門寫入異常資訊,可讓程式繼續進行,但是我經常看到大家在問乙個問題就是:如何讓存在異常後,讓程式繼續進行。

我看到很多人的回答是catch中不寫任何**,這樣回答其實是不負責任的,很多情況下,比如下列**

tryfor (int i = 0; i <= 2; i++)

int number = convert.toint32("aa");

}catch ()

string name=」***」;

這裡我把異常捕捉寫在迴圈外面,如果只是簡單的catch中不寫任何**就讓程式繼續執行迴圈體,顯然這裡是做不到的,程式會繼續往下執行string name=」***」;而不會去執行迴圈體,所以我們可以考慮把異常捕捉寫到迴圈體內,catch中什麼都不寫,或者寫continue讓迴圈繼續

for (int i = 0; i <= 2; i++)

tryint number = convert.toint32("aa");

catch ()

其實異常捕捉有人說太多try會影響效能,但是實際上,有try和沒有try效能差不多,只是在偶爾出現異常後,執行到catch時會消耗很多時間,但是事實上異常並不時時發生,用這點時間換取捕捉到的異常還是值得的,只要你不要把異常捕捉作為程式的邏輯設計,但是不可以否認的是有try catch在編譯時是需要耗一些時間的,因為編譯模式內要回填異常的處理位址。

.net在產生異常時是逐步向外層查詢處理程式的,因此可以說捕獲的越早效率越高.如果當前應用程式沒有對異常進行處理,就交給runtime,在這種情況下,效率才是最低的,而且比較難於處理。

我曾經看過一篇文章,講述的是丟擲異常時,是catch內部丟擲例項化異常類效率高,還是在catch呼叫靜態方法,然後在靜態方法中丟擲異常效率高,例如

private int getitone(int key) {

int value;

if (!_dict.trygetvalue(key,out value)) {

throw new argumentoutofrangeexception("key");

return value;

和private int getittwo(int key) {

int value;

if (!_dict.trygetvalue(key, out value)) {

throwargumentoutofrangeexception();

return value;

private static void throwargumentoutofrangeexception() {

throw new argumentoutofrangeexception("key");

所以說如果自定義乙個靜態的異常類,然後throw還是有優勢的。

C 異常處理

結構化異常 structured exception vs c 異常 c exception 大家都知道c 異常是c 語言的乙個特性,使用者可以使用throw的方式來丟擲異常,try catch 來捕獲異常。結構化異常是諸如,zero divided,access violations等異常,這些異...

c 異常處理

一 概述 c 自身有著非常強的糾錯能力,發展到如今,已經建立了比較完善的異常處理機制。c 的異常情況無非兩種,一種是語法錯誤,即程式中出現了錯誤的語句,函式,結構和類,致使編譯程式無法進行。另一種是執行時發生的錯誤,一般與演算法有關。關於語法錯誤,不必多說,寫 時心細一點就可以解決。c 編譯器的報錯...

C 異常處理

程式設計師常常忽視異常處理的重要性,這給他們自己的 造成相當大損害。本文將討論如何在c 中使用異常處理,並介紹在應用 中新增 片段以防止某些錯誤的一些簡單方法,這些錯誤可能導致程式異常終止。結構化異常處理 net框架提供一種標準的錯誤報告機制稱為結構化異常處理。這種機制依賴於應用中報告錯誤的異常。在...