6
using (SqlConnection con = new SqlConnection())
{
     try
     {
          con.Open();
     }
     catch (Exception ex)
     {
          MessageBox.Show(ex.Message);
     }
}

これはうまくいきます。try catchしかし、何かのようなものを使用せずに例外を処理できるか知りたいif elseですか? または、使用するのはメンデトリーですかtry catch

4

8 に答える 8

6

try catch 以外に例外を処理するメカニズムはありません。次のようなものが欲しいようです

if(connection.DidAnErrorOccur)

しかし、それは存在しません。

于 2012-04-24T18:55:02.947 に答える
3

唯一の方法は、エラーを返すすべての条件を確認することです。とにかくこれを行う必要があります。トライ/キャッチは高価です。try catch は最後の手段であるべきであり、その目的のためにそれを回避する方法はありません。

于 2012-04-24T18:55:48.713 に答える
2

私があなたに与えることができる最善の選択肢は、エルマです。http://code.google.com/p/elmah/ キャッチされなかったすべてのエラーを処理してログに記録します。そこから、発生する可能性のあるエラーをキャッチするだけでなく、上記のエラーを修正するか、予想される特定のエラーをキャッチすることをお勧めします。これは、例外が発生したためにコードを単にスキップするのではなく、潜在的な問題を修正できるようにするための最善の方法です。

于 2012-04-24T19:16:26.397 に答える
1

Tejs の答えは正しいです。エラーを処理するメカニズムは他にないと思います。

ただし、より具体的なエラーを処理することはできます。try catch の外で変数を宣言して、成功したかどうかを確認することもできます。

例:

using (SqlConnection con = new SqlConnection())
{
     bool sqlErrorOccurred;

     try
     {
         con.Open();
         sqlErrorOccurred = false;
     }
     catch (SqlException ex)
     {
          sqlErrorOccurred = true;
     }

     if(sqlErrorOccurred)
     {
         MessageBox.Show("A Sql Exception Occurred");
     }
}
于 2012-04-24T19:08:05.360 に答える
0

上記の答えは正しいです。ただし、もう 1 つ注意すべき点は、グローバル例外ハンドラーを設定できることです。これは、前述の防御コーディングの必要性を解決しません。ただし、すべての例外を処理する必要があるという懸念がある場合 (たとえば、エラーをログに記録するため)、このアプローチは非常に役立ちます。

于 2012-04-24T20:47:11.580 に答える
0

リアルタイム ストリーミング データを使用するシステムを構築しているため、他のすべてがほぼアイドル状態のときに発生する可能性のあるエラーを処理する必要があります。私が使用している API は、"error" という名前のメソッドを介してエラーをプログラムに戻し、例外を添付しています。このメソッドはエラーをスローする可能性がありますが、それは問題です。なぜなら、プログラム全体を完全に try-catch ブロック内に置くことがどのように良い考えなのかがわからないからです。

そこで、この問題を回避するために、プログラムの主要部分でイベントを発生させるイベント ハンドラーを設定します。これにより、その時点でスローされたエラーを処理できます。

例えば:

メインクラスでは:

private void Error(object sender, EventArgs e) {

    Exception ex = sender as Exception;

    Console.WriteLine("Error: " + ex); // Or whatever you want to do with the exception

    // You could even add this if you want to then use the try -catch sequence (which 
    // makes the exception easier to parse and also enables you to stop the program
    // with unhandled exceptions if it's something catastrophic:

    try {

        throw ex;
    } catch (put.your.exception.detail.here) {

        // do stuff
   } finally {

       // do other stuff
   }
}

(API からエラーを受け取るクラス内):

class Foo {
    public event EventHandler ThrowError;

    protected virtual void OnError(Object src, EventArgs e) {

        if (ThrowError != null) {

            ThrowError(src, e);
        }
    }

    private virtual void error(Exception e) {

        OnError(e, EventArgs.Empty);
    }
}
于 2014-05-13T22:39:32.863 に答える