C#에서 예외 클래스 없이 사용자 지정 예외 발생

Muhammad Zeeshan 2023년10월12일
  1. C#의 예외
  2. C#에서 예외 클래스 없이 사용자 지정 예외 발생
C#에서 예외 클래스 없이 사용자 지정 예외 발생

이 자습서에서는 Exception 클래스를 사용하지 않고 C#에서 사용자 지정 예외를 throw하는 방법을 알려줍니다. 먼저 예외의 개념에 대해 이야기해 봅시다.

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() 메서드에서 다음과 같은 두 개의 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