次の方法で共有


try/catch ブロックを使用して例外をキャッチする方法

例外を発生またはスローする可能性があるコード ステートメントを try ブロックに配置し、例外または例外の処理に使用するステートメントを、catch ブロックの下の 1 つ以上のtry ブロックに配置します。 各 catch ブロックには例外の種類が含まれており、その例外の種類を処理するために必要な追加のステートメントを含めることができます。

次の例では、 StreamReaderdata.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 ブロックにコードを設定するタイミングに関する推奨事項については、「例外のベスト プラクティス」を参照してください。

こちらも参照ください