2011-07-20 9 views
3

C#で何回か処理できない例外をスローしたいと思います。プロセスが停止するエスカレートされた例外。これは可能ですか?プロセスを停止する例外をスローする

+0

単純に例外をスローしてプロセスを強制終了しないのはなぜですか? –

答えて

2

どのように単純に次のようにプロセスを終了について:

例外はありません
Process.GetCurrentProcess().Close(); 
2

例外を処理しない場合は、処理しないでください。

4

あなたが好きな何かができる:

class BadassException : Exception 
{ 
    public BadassException(string message) 
    { 
    Environment.FailFast(message); 
    } 
} 

... 

throw new BadassException("Erk!!!"); 
+0

+1スロー構文の乱用だけです。明らかにbadass例外です。 –

+0

これはコーディングの恐怖だと思います。例外には、ロジックが埋め込まれてはなりません。例外がスローされ、例外のタイプに応じてどのようなロジックを実行するかを決定するのはcatchブロックまでです。あなたのBadAss例外をスローしますが、catchブロックがEnvironment.FailFastを実行させます。 –

+0

@ジョン・レイナー:私はあなたに同意しますが、OPはそれを求めませんでした。私はちょうど尋ねられたものを与えました:) – leppie

2

は、それが原爆です。

しかし、このシナリオを処理するためのより良い方法があります。あなたのプロセスを終了させる場合は、Application.Exitのようなオプションを見てください。

0

すべての例外はException基本クラスから継承しなければならないため、実際には可能ではありません。catch(Exception)を実行できます。

しかし、他の人が指摘しているように、あなたはすばやく失敗する可能性があります。またそうのように、特にキャッチすることができない例外をスローすることができます

public class MyLibraryClass 
{ 
    private class MyException : Exception { ... } 

    public void MyMethod() { throw new MyException(); } 
} 

その後、発信者のみcatch(Exception exc)catch(MyException exc)を行うことはできません。しかし、それは例外が捕らえられることを意味します。

+0

CLRは 'Exception'ではないオブジェクトを投げることをサポートしています。小さな手でILを巻き上げるだけで、簡単に何かを投げることができます。 IIRC、それらは 'catch {}'で捕捉されるだけです。 – leppie

0

処理されない例外は、アプリケーションを停止します。通常、アプリケーションには、未処理の例外をキャッチし、データのメンテナンスを行い、アプリケーションを正常にシャットダウンするアプリケーションまたはトップレベル例外ハンドラがあります。

あなたの場合、最良のアプローチは、StopApplicationExceptionのような例外クラスから派生した新しい例外を作成することだと思います。

アプリケーションを停止する必要があるときはいつでも、このタイプの例外をスローします。キャッチブロックのコールスタックをさらに上に移動します。

catch (StopApplicationException) 
{ 
    //Stop your application 
} 
catch (ArgumentNullException) 
{ 
    //Null Exception Logic goes here... 
} 
catch ...And so forth 
関連する問題