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.empname
と emp2.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
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