14
internal static string ReadCSVFile(string filePath)
{
    try
    {
        ...
        ...
    }
    catch(FileNotFoundException ex)
    {
        throw ex;
    }
    catch(Exception ex)
    {
        throw ex;
    }
    finally
    {
        ...
    }
}


//Reading File Contents

public void ReadFile()
{
    try
    {
        ...
        ReadCSVFile(filePath);
        ...
    }
    catch(FileNotFoundException ex)
    {
        ...
    }
    catch(Exception ex)
    {
        ...
    }
}

上記のコードサンプルでは、​​2つの関数ReadFileとがありReadCSVFileます。
ReadCSVFile、タイプFileNotFoundExceptionの例外が発生します。これは、catch(FileNotFoundException)ブロックでキャッチされます。しかし、この例外をスローしてReadFile関数のcatch(FileNotFoundException)にキャッチすると、catch(FileNotFoundException)ではなくcatch(Exception)ブロックにキャッチされます。さらに、デバッグ中、exの値はObjectNotInitializedと表示されます。内部例外を失うことなく、または少なくとも例外メッセージを発生させることなく、呼び出された関数から呼び出し元関数のcatchブロックに例外をスローするにはどうすればよいですか?

4

5 に答える 5

21

throw;代わりに使用する必要がありますthrow ex;

internal static string ReadCSVFile(string filePath)
{
    try
    {
        ...
        ...
    }
    catch(FileNotFoundException ex)
    {
        throw;
    }
    catch(Exception ex)
    {
        throw;
    }
    finally
    {
        ...
    }
}

それに加えて、キャッチブロックで何もせずに再スローする場合は、キャッチブロックはまったく必要ありません。

internal static string ReadCSVFile(string filePath)
{
    try
    {
        ...
        ...
    }
    finally
    {
        ...
    }
}

catchブロックのみを実装します。

  1. 例外を処理したいとき。
  2. キャッチされた例外を内部例外として新しい例外をスローすることにより、例外に追加情報を追加する場合:

    catch(Exception exc) { throw new MessageException("Message", exc); }

例外が発生する可能性のあるすべてのメソッドにcatchブロックを実装する必要はありません。

于 2011-08-11T10:30:35.697 に答える
2

呼び出された関数でthrowを使用するだけです。複数の例外タイプでcatchブロックをオーバーロードしないでください。発信者にその面倒を見てもらいましょう。

于 2011-08-11T10:29:55.150 に答える
2

交換する必要があります

throw ex;

throw;
于 2011-08-11T10:30:41.613 に答える
1

呼び出された関数では、次のようにthrowを使用します

 try
 {
   //you code
 }
 catch
 {
     throw;
}

ここで例外が発生した場合、これは呼び出し元の関数によってキャッチされます。

于 2011-08-11T10:34:52.890 に答える
0

あなたのコードはここでうまく機能します、ここをチェックしてくださいhttp://ideone.com/jOlYQ

于 2011-08-11T10:46:55.940 に答える