例外を発生またはスローする可能性があるコード ステートメントを try
ブロックに配置し、例外または例外の処理に使用するステートメントを、catch
ブロックの下の 1 つ以上のtry
ブロックに配置します。 各 catch
ブロックには例外の種類が含まれており、その例外の種類を処理するために必要な追加のステートメントを含めることができます。
次の例では、 StreamReader が data.txt という名前のファイルを開き、ファイルから行を取得します。 コードが 3 つの例外のいずれかをスローする可能性があるため、try
ブロックに配置されます。 3 つの catch
ブロックが例外をキャッチし、コンソールに結果を表示して処理します。
using System;
using System.IO;
public class ProcessFile
{
public static void Main()
{
try
{
using (StreamReader sr = File.OpenText("data.txt"))
{
Console.WriteLine($"The first line of this file is {sr.ReadLine()}");
}
}
catch (FileNotFoundException e)
{
Console.WriteLine($"The file was not found: '{e}'");
}
catch (DirectoryNotFoundException e)
{
Console.WriteLine($"The directory was not found: '{e}'");
}
catch (IOException e)
{
Console.WriteLine($"The file could not be opened: '{e}'");
}
}
}
Imports System.IO
Public Class ProcessFile
Public Shared Sub Main()
Try
Using sr As StreamReader = File.OpenText("data.txt")
Console.WriteLine($"The first line of this file is {sr.ReadLine()}")
End Using
Catch e As FileNotFoundException
Console.WriteLine($"The file was not found: '{e}'")
Catch e As DirectoryNotFoundException
Console.WriteLine($"The directory was not found: '{e}'")
Catch e As IOException
Console.WriteLine($"The file could not be opened: '{e}'")
End Try
End Sub
End Class
共通言語ランタイム (CLR) は、 catch
ブロックによって処理されない例外をキャッチします。 CLR によって例外がキャッチされた場合、CLR の構成によっては、次のいずれかの結果が発生する可能性があります。
- [デバッグ] ダイアログ ボックスが表示されます。
- プログラムは実行を停止し、例外情報を含むダイアログ ボックスが表示されます。
- エラーが 標準エラー出力ストリームに出力されます。
注
ほとんどのコードは例外をスローすることができ、 OutOfMemoryExceptionなどの一部の例外はいつでも CLR 自体によってスローされます。 アプリケーションではこれらの例外に対処する必要はありませんが、他のユーザーが使用するライブラリを記述する場合の可能性に注意してください。
try
ブロックにコードを設定するタイミングに関する推奨事項については、「例外のベスト プラクティス」を参照してください。
こちらも参照ください
.NET