C# で例外クラスを使用せずにカスタム例外をスローする

Muhammad Zeeshan 2023年10月12日
  1. C# の例外
  2. C# で例外クラスなしでカスタム例外をスローする
C# で例外クラスを使用せずにカスタム例外をスローする

このチュートリアルでは、Exception クラスを使用せずに C# でカスタム例外をスローする方法を説明します。 まず、例外の概念について話しましょう。

C# の例外

プログラムは、実行中にいつでも例外に遭遇する可能性があります。 エラーの一般的な定義は、苦痛を引き起こすが予期されていなかった出来事です。

ただし、さまざまな理由から、アプリケーションのコード内の例外は当然のことです。 例外処理は、例外が明示的に発生するたびに例外を処理するためにアプリケーションが使用するロジックです。

さまざまな状況で例外が保証される場合があります。 このエラーは、よく知られている NullReferenceException やデータベース クエリのタイムアウトなど、さまざまな原因で発生する可能性があります。

C# で例外クラスなしでカスタム例外をスローする

カスタム例外は、特定の例外タイプをキャッチして処理する場合に便利です。 また、重大な例外を追跡するのにも役立ちます。

固有の例外タイプは、エラー監視ツールがアプリケーションの問題とログを追跡するのに役立ちます。

以下の例では、従業員をチェックする EmployeeNotFoundException クラスをアプリケーションに作成します。 従業員配列に存在しない場合、例外がスローされます。

まず、次のライブラリをインポートする必要があります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

まず、従業員 ID と従業員名を保持する MyEmployee クラスを作成します。

class MyEmployee {
  public int empid { get; set; }
  public string empname { get; set; }
}

ここで、EmployeeNotFoundException タイプの例外を作成します。 従業員配列に従業員が見つからない場合にスローされます。

class EmployeeNotFoundException : Exception {
  public EmployeeNotFoundException(string employeename)
      : base(String.Format("Employee Not Found: {0}", employeename)) {}
}

Main() メソッドでは、次の名前の 2つの MyEmployee オブジェクトを作成します。

MyEmployee emp1 = null;
MyEmployee emp2 = null;

emp1.empnameemp2.empname に従業員名を入力し、オブジェクトを CheckEmployee メソッドに渡して、従業員がリストに存在するかどうかを確認します。

try {
  emp1 = new MyEmployee();
  emp1.empname = "Muhammad Zeeshan";
  CheckEmployee(emp1);

  emp2 = new MyEmployee();
  emp2.empname = "Hermes Fang";
  CheckEmployee(emp2);
}

従業員が配列に存在しない場合、EmployeeNotFoundException がスローされます。

catch (EmployeeNotFoundException ex) {
  Console.WriteLine(ex.Message);
}

最後に、以下に示すように、.contains() を使用して従業員を検証する CheckEmployee() 関数を作成します。

public static void CheckEmployee(MyEmployee e) {
  string[] arr = { "Muhammad Zeeshan", "Ali Khan", "Saad Jaan" };
  if (!arr.Contains(e.empname))
    throw new EmployeeNotFoundException(e.empname);
}

完全なソース コード:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CustomxceptionbyZeeshan {
  class MyEmployee {
    public int empid { get; set; }
    public string empname { get; set; }
  }
  class EmployeeNotFoundException : Exception {
    public EmployeeNotFoundException(string employeename)
        : base(String.Format("Employee Not Found: {0}", employeename)) {}
  }
  class Program {
    static void Main(string[] args) {
      MyEmployee emp1 = null;
      MyEmployee emp2 = null;
      try {
        emp1 = new MyEmployee();
        emp1.empname = "Muhammad Zeeshan";
        CheckEmployee(emp1);

        emp2 = new MyEmployee();
        emp2.empname = "Hermes Fang";
        CheckEmployee(emp2);
      } catch (EmployeeNotFoundException ex) {
        Console.WriteLine(ex.Message);
      }
      Console.ReadKey();
    }

    public static void CheckEmployee(MyEmployee e) {
      string[] arr = { "Muhammad Zeeshan", "Ali Khan", "Saad Jaan" };
      if (!arr.Contains(e.empname))
        throw new EmployeeNotFoundException(e.empname);
    }
  }
}

出力:

Employee Not Found: Hermes Fang
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn

関連記事 - Csharp Exception