09異常処理


C#を含むすべて.NET Framework言語は.NETのシステム.Exceptionクラスベース
Exceptionが発生してプログラムが処理されていない場合、crashは終了します.

try, catch, finally


try、catch、finallyキーを使用してExceptionを制御
try
{
   // 실행 문장들
}
catch (ArgumentException ex)
{
   // Argument 예외처리
}
catch (AccessViolationException ex)
{
   // AccessViolation 예외처리
}
finally
{
   // 마지막에 반드시 실행
}

throw


throwキーワードからExceptionを生成し、親呼び出し元に例外処理を渡すことができます.

catch文でthrowを使用する3つの場合


1)catchが渡すExceptionオブジェクトthrow
throw ex;
CAtch(Exception ex)から渡されたexを直接投げ出す
exの異常情報を保持する利点があるが、Stack Trace情報をリセットすると、throw文以前のcallスタック情報が失われるため、使用は推奨されない
2)新しいExceptionオブジェクトを作成して投げ出す
throw new MyException(msg, ex);
C#のnewキーワードWrapping catchで取得したExceptionを使用して、新しいExceptionオブジェクトを作成
例外情報を保存するには、catchで取得したExceptionオブジェクトを新しいオブジェクトのInnerExceptionに含める必要があります.
3) only throw
throw;
Exceptionオブジェクトを使用せずにthrowのみを使用
catch文で取得した例外を親呼び出し元にそのまま転送する(rethrow)

例外処理例

try
{
    // 실행 문장들
    Step1();
    Step2();
    Step3();
}
catch(IndexOutOfRangeException ex)
{
    // 새로운 Exception 생성하여 throw
    throw new MyException("Invalid index", ex);
}
catch(FileNotFoundException ex)
{    
    bool success = Log(ex);
    if (!success)
    {
        // 기존 Exception을 throw
        throw ex;
    }
}
catch(Exception ex)
{    
    Log(ex);
    // 발생된 Exception을 그대로 호출자에 전달
    throw;
}
ソース:http://www.csharpstudy.com/