2009-03-31 15 views
2

C++では、何も返さずにメソッドを終了したい場合はできます。C#でのメソッドの終了

// A completely useless method 
static public double function(int a){ 
    if(a==1){ 
    cout << "Error !"; 
    exit(1); 
    } 
    else 
    return (double)a;  
} 

どのようにすればC#で対応できますか?

+0

を呼び出すことです。これは実際にはそうであるため、「クラッシュ()」と呼ばれるべきです。関数の途中でプログラムをクラッシュさせたいのですか? –

答えて

12

「出口」機能は、単にメソッドを終了していない - それは、プログラムを終了します。 C#コンソールアプリケーションで

http://msdn.microsoft.com/en-us/library/k9dcesdd.aspx

、あなたは)(System.Environment.Exitを呼び出すことができます。

しかし、私は、これを行うコードは、はるかに優れた構造で書かれていることを示唆しています。たとえば、メソッドによって例外がスローされ、呼び出し側がその処理方法を決定できるようにします。

0

プログラム全体を終了することなくメソッドから抜けるように戻ってみてください。

+0

これはvoidメソッドにのみ適用されます。他のタイプはどうですか?あなたは価値を返す必要があります。 – stackptr

7

return文を使用して何も返さずにメソッドを終了することができます。しかし、戻り値の型がvoid以外のものであれば、何かを返さなければなりません。

エラーのためにメソッドから抜け出したい場合は、例外を参照する必要があります。

0

これは確かに奇妙なことですが、ええ、あなたはEnvironment.Exitを呼び出すことができます。私は強く代わりに例外をスローすることをお勧めします。これにより、クリーンアップの機会が得られ、発信者はエラーの処理方法を決定できます。誰もがしない場合、あなたはまだプロセスをダウンされます - しかし、より優雅にいくらか。あなたが何をしたいの文脈を考慮

0

、これは同等でなければなりません:

public static double SomeFunction(int a) 
{ 
    if(a==1) 
    { 
     throw new Exception("Error!"); 
    } 
    else 
    { 
     return (double)a; 
    } 
} 
+0

一般的にはYesですが、Shinkaに注意してください.Exceptionのタイプについてもっと正確にしたいと思うでしょう。すなわちNotSupportedException、ArgumentException、ArgumentOutOfRangeException。 – rism

0

あなたにはありません。あなたのメソッドに従うことで、実際にdoubleが返されたかどうかをチェックするために、関数を呼び出すたびにテストを行う必要があります。

public static double function(int a) { 
    if (a == 1) { 
     throw new ArgumentException("The value 1 is not accepted."); 
    } 
    return (double)a;  
} 

例外:

あなたの例では

、あなたは

public static double myFunc(int a) { 

    if(a==1){ 
     throw new InvalidArgumentException("a must be greater than one."); 
    } 

    return (double)a; 

} 
13

.NETでエラー状態を処理する通常の方法は、例外をスローすることです...のような何かをしたいですメソッドを呼び出すコードや、行の下のどこかで捕捉されます。適切なレベルでそれを処理するのは、呼び出し側のコードに依存します。

この方法で入力をサニタイズするのはかなり一般的です。そのため、コードの後ろに追跡するのがはるかに難しいエラーを引き起こすのではなく、誤った値が早期にキャッチされます。

+0

私は議論したいと思いますが、あなたはArgumentExceptionをキャッチしてはいけません。それは厳密に呼び出し側の例外です。 –

+1

インテリジェントに処理して回復できる例外(および例外のみ)を処理する必要があります。 –

0

別のオプションのアカウントに以前のすべての答えを取って、そして場合には、Windowsフォームで作業しているが、出口()関数を使用しないでください

Application.Exit(); 
関連する問題