一般に、基本的な 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 にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET