일반적으로 기본 catch
문을 사용하기보다는 특정 유형의 예외를 잡는 것이 좋은 프로그래밍 습관입니다.
예외가 발생하면 스택을 따라 전달되며 각 catch 블록은 그것을 처리할 기회를 갖습니다. catch 문의 순서가 중요합니다. 특정 예외를 대상으로 하는 catch 블록을 일반적인 예외 catch 블록 앞에 배치하지 않으면 컴파일러가 오류를 발생시킬 수 있습니다. 적절한 catch 블록은 예외의 형식을 catch 블록에 지정된 예외의 이름과 일치시켜 결정됩니다. 특정 catch 블록이 없으면, 일반 catch 블록이 존재할 경우 그 블록에 의해 예외가 처리됩니다.
다음 코드 예제에서는 try
/catch
블록을 사용하여 InvalidCastException을(를) 포착합니다. 샘플은 직원 수준(Employee
)이라는 단일 속성을 가진 Emlevel
클래스를 만듭니다. 메서드는 PromoteEmployee
개체를 사용하고 직원 수준을 증가합니다.
InvalidCastException 인스턴스가 DateTime 메서드에 전달될 때 PromoteEmployee
발생합니다.
using System;
public class Employee
{
//Create employee level property.
public int Emlevel
{
get
{
return(emlevel);
}
set
{
emlevel = value;
}
}
private int emlevel = 0;
}
public class Ex13
{
public static void PromoteEmployee(Object emp)
{
// Cast object to Employee.
var e = (Employee) emp;
// Increment employee level.
e.Emlevel = e.Emlevel + 1;
}
static void Main()
{
try
{
Object o = new Employee();
DateTime newYears = new DateTime(2001, 1, 1);
// Promote the new employee.
PromoteEmployee(o);
// Promote DateTime; results in InvalidCastException as newYears is not an employee instance.
PromoteEmployee(newYears);
}
catch (InvalidCastException e)
{
Console.WriteLine("Error passing data to PromoteEmployee method. " + e.Message);
}
}
}
Public Class Employee
'Create employee level property.
Public Property Emlevel As Integer
Get
Return emlevelValue
End Get
Set
emlevelValue = Value
End Set
End Property
Private emlevelValue As Integer = 0
End Class
Public Class Ex13
Public Shared Sub PromoteEmployee(emp As Object)
' Cast object to Employee.
Dim e As Employee = CType(emp, Employee)
' Increment employee level.
e.Emlevel = e.Emlevel + 1
End Sub
Public Shared Sub Main()
Try
Dim o As Object = New Employee()
Dim newYears As New DateTime(2001, 1, 1)
' Promote the new employee.
PromoteEmployee(o)
' Promote DateTime; results in InvalidCastException as newYears is not an employee instance.
PromoteEmployee(newYears)
Catch e As InvalidCastException
Console.WriteLine("Error passing data to PromoteEmployee method. " + e.Message)
End Try
End Sub
End Class
참고하십시오
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET