フッターコンテンツにスキップ
.NETヘルプ

C# の Try/Catch (開発者向けの仕組み)

C#プログラミングに慣れていない場合は、"try catch"ステートメントという用語を何度か聞いたことがあるかもしれません。 このチュートリアルでは、例外処理の世界を掘り下げ、キャッチブロックに焦点を当て、コードをエラーに対してより堅牢にするためにtryとcatchステートメントをどのように使用できるかを探ります。 その過程で、理解を固めるための実際の例をたくさん提供します。

例外とは何か、それを処理する理由

C#では、例外とは、プログラムが実行中に発生し、プログラムの標準的な命令実行の流れを妨げる出来事を指します。 例外が発生すると、プログラムの流れは転換され、例外が処理されない限り、プログラムは突然終了します。

例外処理は、これらの破壊的イベントを予測し管理する方法であり、プログラムが予期しない問題から回復し、意図どおりに続行できるようにします。 tryとcatchブロックを使用することで、コードがエラーを優雅に処理し、ユーザーに意味のあるフィードバックを提供することができます。

Tryブロック

tryブロックは、例外が発生する可能性があると予期されるコードセグメントです。 コードをtryブロックでラップすると、コンパイラーに対して、そのブロック内で発生する可能性のある例外を処理したいことを伝えます。

tryブロックを使用する基本的な例を次に示します。

try
{
    // Code that may generate an exception
}
catch (Exception ex)
{
    // Handle the exception
}
try
{
    // Code that may generate an exception
}
catch (Exception ex)
{
    // Handle the exception
}
$vbLabelText   $csharpLabel

捕捉する例外をキャッチするブロック

catchステートメントは、例外を処理するためにtryブロックと共に使用されます。 tryブロック内で例外が発生すると、プログラムの実行は適切なcatchブロックにジャンプし、例外に対するプログラムの対応を指定することができます。

例外を捕捉するには、tryブロックの直後にcatchブロックを作成する必要があります。 catchブロックには通常、捕捉された例外を表すパラメータが含まれます。

アクション中のcatchステートメントの例を次に示します。

try
{
    int result = 10 / 0;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
try
{
    int result = 10 / 0;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
$vbLabelText   $csharpLabel

この例では、try ブロック内のコードはゼロ除算を試みており、DivideByZeroException が生成されます。 その後、catchブロックが例外を処理し、ユーザーにメッセージを表示します。

異なる例外を処理する複数のキャッチブロック

場合によっては、tryブロックで異なるタイプの可能性のある例外が発生することがあります。 そのような場合、複数のcatchブロックを使用して、各例外タイプを個別に処理できます。

複数のcatchブロックの使用方法を示す例を以下に示します。

try
{
    int[] numbers = new int[7];
    numbers[12] = 70; // This line will throw an exception
}
catch (IndexOutOfRangeException ex)
{
    Console.WriteLine("An index out of range error occurred: " + ex.Message);
}
catch (Exception e)
{
    Console.WriteLine("An unexpected error occurred: " + e.Message);
}
try
{
    int[] numbers = new int[7];
    numbers[12] = 70; // This line will throw an exception
}
catch (IndexOutOfRangeException ex)
{
    Console.WriteLine("An index out of range error occurred: " + ex.Message);
}
catch (Exception e)
{
    Console.WriteLine("An unexpected error occurred: " + e.Message);
}
$vbLabelText   $csharpLabel

この例では、try ブロック内のコードは存在しない配列インデックスに値を割り当てようとしており、IndexOutOfRangeException が生成されています。 最初のcatchブロックがこの特定の例外を処理し、二番目のcatchブロックが発生する可能性のある他の例外を捕捉します。

複数のcatchブロックを使用する場合、常に最も特定の例外タイプから最も一般的なものへ順序を付けてください。

キャッチブロックに条件を追加する例外フィルター

例外フィルターを使用すると、特定の条件が満たされた場合のみ例外を捕捉するための条件をキャッチブロックに追加できます。 例外フィルターを使用するには、catch ステートメントに when キーワードの後に​​条件を追加します。

例外フィルターの使用を示す例を以下に示します。

try
{
    int result = 10 / 0;
}
catch (DivideByZeroException ex) when (ex.Message.Contains("divide"))
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("A different divide by zero error occurred: " + ex.Message);
}
try
{
    int result = 10 / 0;
}
catch (DivideByZeroException ex) when (ex.Message.Contains("divide"))
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("A different divide by zero error occurred: " + ex.Message);
}
$vbLabelText   $csharpLabel

上記の例では、最初の catch ブロックは、例外メッセージに"divide"という単語が含まれている場合にのみ、DivideByZeroException を処理します。 条件が満たされない場合、二番目のキャッチブロックが例外を処理します。

最終的なコード実行を保証するFinallyブロック

場合によっては、例外の有無にかかわらず特定のコード片を実行したいことがあります。 これを実現するには、finally ブロックを使用できます。

finally ブロックは try ブロックと catch ブロックの後に配置され、例外が発生したかどうかに関係なく常に実行されます。

finally ブロックの使用方法を示す例を次に示します。

try
{
    int result = 10 / 2;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
finally
{
    Console.WriteLine("This line will always be executed.");
}
try
{
    int result = 10 / 2;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
finally
{
    Console.WriteLine("This line will always be executed.");
}
$vbLabelText   $csharpLabel

上記の例では、try ブロック内のコードが例外を生成しない場合でも、finally ブロックは実行されます。

カスタム例外:必要に応じた例外の調整

場合によっては、特定の例外を処理するために独自のカスタム例外を作成したくなるかもしれません。 これを行うには、Exception クラスから継承する新しいクラスを作成します。

カスタム例外の作成例を次に示します。

public class CustomException : Exception
{
    public CustomException(string errorMessage) : base(errorMessage)
    {
    }
}
public class CustomException : Exception
{
    public CustomException(string errorMessage) : base(errorMessage)
    {
    }
}
$vbLabelText   $csharpLabel

今度は、このカスタム例外をtryおよびcatchブロックで使用できます。

try
{
    throw new CustomException("This is a custom exception.");
}
catch (CustomException ex)
{
    Console.WriteLine("A custom exception occurred: " + ex.Message);
}
try
{
    throw new CustomException("This is a custom exception.");
}
catch (CustomException ex)
{
    Console.WriteLine("A custom exception occurred: " + ex.Message);
}
$vbLabelText   $csharpLabel

この例では、try ブロックは CustomException インスタンスをスローし、それが catch ブロックによってキャッチされて処理されます。

IronPDF:例外処理とPDF機能の統合

IronPDFについてさらに学ぶは、C#でPDFファイルを作成、編集、およびコンテンツを抽出するための人気のあるライブラリです。 このセクションでは、IronPDFを例外処理のtry-catchアプローチに統合し、潜在的なエラーを優雅に処理する方法を探ります。

IronPDFのインストール

始めるには、まずIronPDFのNuGetパッケージをインストールする必要があります。 パッケージマネージャーコンソールを使用してこれを行うことができます。

Install-Package IronPdf

または、Visual Studioの"NuGetパッケージの管理"ダイアログで"IronPDF"を検索することもできます。

IronPDFでPDFを作成し、例外を処理する

HTML文字列からIronPDFを使用してPDFファイルを作成したいとしましょう。 PDF の作成プロセスでは例外が発生する可能性があるため、try-catch ブロックを使用して例外を処理できます。 以下は、 IronPDFを使用して PDF を作成し、try-catch を使用して例外を処理する方法の例です。

using IronPdf;
using System;

try
{
    var renderer = new ChromePdfRenderer();
    string html = "Hello, World!";
    PdfDocument PDF = renderer.RenderHtmlAsPdf(html);
    PDF.SaveAs("output.PDF");
    Console.WriteLine("PDF created successfully.");
}
catch (Exception ex)
{
    Console.WriteLine("An unexpected error occurred: " + ex.Message);
}
using IronPdf;
using System;

try
{
    var renderer = new ChromePdfRenderer();
    string html = "Hello, World!";
    PdfDocument PDF = renderer.RenderHtmlAsPdf(html);
    PDF.SaveAs("output.PDF");
    Console.WriteLine("PDF created successfully.");
}
catch (Exception ex)
{
    Console.WriteLine("An unexpected error occurred: " + ex.Message);
}
$vbLabelText   $csharpLabel

この例では、tryブロックにIronPDFを使用してPDFを作成するコードが含まれています。 処理中に例外が発生した場合、catchブロックがエラーを処理し、ユーザーに関連するエラーメッセージを表示します。

PDFからテキストを抽出し、例外を処理する

また、IronPDFを使用してPDFファイルからテキストを抽出したいかもしれません。 前の例と同様に、潜在的な例外を処理するには、try-catch ブロックを使用できます。

IronPDFを使用してPDFファイルからテキストを抽出し、例外を処理する例を次に示します。

using IronPdf;
using System;
using System.IO;

try
{
    string pdfPath = "input.PDF";
    if (File.Exists(pdfPath))
    {
        PdfDocument PDF = PdfDocument.FromFile(pdfPath);
        string extractedText = PDF.ExtractAllText();
        Console.WriteLine("Text extracted successfully: " + extractedText);
    }
    else
    {
        Console.WriteLine("The specified PDF file does not exist.");
    }
}
catch (Exception ex)
{
    Console.WriteLine("An unexpected error occurred: " + ex.Message);
}
using IronPdf;
using System;
using System.IO;

try
{
    string pdfPath = "input.PDF";
    if (File.Exists(pdfPath))
    {
        PdfDocument PDF = PdfDocument.FromFile(pdfPath);
        string extractedText = PDF.ExtractAllText();
        Console.WriteLine("Text extracted successfully: " + extractedText);
    }
    else
    {
        Console.WriteLine("The specified PDF file does not exist.");
    }
}
catch (Exception ex)
{
    Console.WriteLine("An unexpected error occurred: " + ex.Message);
}
$vbLabelText   $csharpLabel

C# での Try/Catch (開発者向けの仕組み) 図 1

この例では、tryブロックにIronPDFを使用してPDFからテキストを抽出するコードが含まれています。 処理中に例外が発生した場合、catchブロックがエラーを処理し、ユーザーに関連するメッセージを表示します。

結論

IronPDFを例外処理のtry-catchアプローチと組み合わせることで、PDFファイルを操作する際にエラーを優雅に処理する堅牢なアプリケーションを作成することができます。 これによりアプリケーションの安定性が向上するだけでなく、全体的なユーザーエクスペリエンスも向上します。

外部ライブラリのIronPDFを使用する際には、常に潜在的な例外を考慮し、tryおよびcatchステートメントを適切に使用して処理してください。 このようにして、アプリケーションが予期しない問題にも堅牢でユーザーフレンドリーであることを保証できます。

IronPDFはライブラリの無料トライアルを提供しており、コミットなしにその機能を探索できます。 試用期間後にIronPDF を引き続き使用する場合は、ライセンスは $799 から開始されます。

よくある質問

C#におけるtry-catchブロックの目的は何ですか?

C#のtry-catchブロックは、プログラムの実行中に発生する可能性のある例外を処理するために使用されます。tryブロックには例外を投げる可能性のあるコードが含まれ、catchブロックにはエラーを処理してプログラムをスムーズに続行するためのコードが含まれます。

C#でのPDF操作の際、どのように例外処理を実装できますか?

C#でのPDF操作の際に、PDFの作成や操作に関わる処理を囲むtry-catchブロックを使用して例外処理を実装できます。これにより、ファイルが見つからない、または無効なフォーマットなどの潜在的なエラーをキャッチして処理し、アプリケーションの安定性を確保します。

なぜ例外処理においてfinallyブロックが重要なのでしょうか?

finallyブロックは、例外が投げられたかどうかに関わらず、特定のコードが実行されることを保証するため重要です。これは、ファイルストリームやデータベース接続を閉じるなど、リソースの解放やクリーンアップ作業を行う上で特に有用です。

C#で複数のcatchブロックを使用する例を教えてくれますか?

はい、C#では異なる種類の例外を処理するために複数のcatchブロックを使用できます。たとえば、FileNotFoundExceptionを処理するためのcatchブロックと、FormatExceptionを処理するための別のcatchブロックを持つことができます。これにより、特定の例外タイプに合ったより正確なエラー処理が可能です。

IronPDFはC#の例外処理とどのように統合されていますか?

IronPDFは、HTMLをPDFに変換したり、PDFファイルからテキストを抽出したりする操作を行う際にtry-catchブロックを使用できるようにすることで、C#の例外処理と統合されています。この統合により、潜在的なエラーを管理し、アプリケーションの堅牢性を向上させます。

IronPDFを用いる際に遭遇する可能性のある一般的な例外は何ですか?

IronPDFを使用する際の一般的な例外には、ファイルパスが間違っている場合のFileNotFoundExceptionや、PDFコンテンツが正しくレンダリングされていない場合のInvalidOperationExceptionなどがあります。これらの例外をtry-catchブロックで処理することで、アプリケーションのクラッシュを防ぐことができます。

C#プロジェクトにIronPDFをインストールするにはどうすればよいですか?

C#プロジェクトにIronPDFをインストールするには、パッケージマネージャーコンソールでInstall-Package IronPDFというコマンドを使用するか、Visual Studioの「NuGetパッケージ管理」で'IronPDF'を検索します。これにより、プロジェクトに必要なライブラリ参照が追加されます。

catchブロックと例外フィルターの違いは何ですか?

catchブロックはtryブロック内で発生した例外を処理するために使用されるのに対し、例外フィルターは、catchブロックが実行される条件を指定することを可能にします。これはwhenキーワードを使用して行い、例外処理に対するより細かな制御を可能にします。

Jacob Mellor、Ironチームの最高技術責任者(CTO)
最高技術責任者(CTO)

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。

彼の主要なIronPDFとIron Suite .NETライブラリは、世界中で3000万以上のNuGetインストールを達成し、彼の基礎となるコードは世界中で使用されている開発者ツールに力を与え続けています。25年の商業経験と41年のコーディングの専門知識を持つJacobは、次世代の技術リーダーを指導しながら、エンタープライズグレードのC#、Java、Python PDFテクノロジーにおけるイノベーションの推進に注力しています。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me