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)
{
...
}
}
上記のコードサンプルには、ReadFileとReadCSVFileの2つの関数があります。
ReadCSVFileで、タイプFileNotFoundExceptioonの例外が発生します。これは、catch(FileNotFoundException)ブロックでキャッチされます。しかし、この例外をスローしてReadFile()関数のcatch(FileNotFoundException)でキャッチすると、catch(FileNotFoundException)ではなくcatch(Exception)ブロックでキャッチされます。さらに、デバッグ中、exの値はObject NotInitializedと表示されます。内部例外を失うことなく、または少なくとも例外メッセージを表示せずに、呼び出された関数から呼び出し元関数のcatchブロックに例外をスローするにはどうすればよいですか?
_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ブロックのみを実装します。
キャッチされた例外を内部例外として新しい例外をスローすることにより、例外に追加情報を追加する場合:
catch(Exception exc) { throw new MessageException("Message", exc); }
例外が発生する可能性のあるすべてのメソッドにcatchブロックを実装する必要はありません。
呼び出された関数でthrowを使用するだけです。複数の例外タイプでcatchブロックをオーバーロードしないでください。発信者にそれを任せます。
交換する必要があります
throw ex;
沿って
throw;
あなたのコードはここでうまく機能します、ここをチェックしてください http://ideone.com/jOlYQ
呼び出された関数では、次のようにthrowを使用します
try
{
//you code
}
catch
{
throw;
}
ここで例外が発生した場合、これは呼び出し元の関数によってキャッチされます。