次の方法で共有


Visual Basic .NET の例外処理の概要

Cat Francis
Visual Studio Team
Microsoft Corporation

February 2002
日本語版最終更新日 2003 年 5 月 6 日

知識は真実からだけでなく、間違いからも得ることができる。— カール ユング

要約 : Microsoft® Visual Basic® .NET の構造化例外処理と非構造化例外処理の概要を説明します。適切な例外の処理方法を選択するうえで考慮すべきこと、それらの方法へのアプローチ、独自に例外を作成する方法、例外オブジェクトのプロパティなどを説明します。末尾に掲載した表は、事前定義の例外クラスとその派生クラスをまとめたものです。

目次

はじめに
非構造化例外処理
構造化例外処理
まとめ

はじめに

最初から完璧なコードを作成できるのは完全無欠なプログラマのみです。したがって、プログラマであれば誰でもアプリケーションの開発途上で 1 つずつエラーを消していくしかありません。

幸いなことに、Microsoft Visual Basic .NET は 2 つの例外処理方法を備えています。1 つは構造化されていない、旧バージョンの Visual Basic にある例外処理規則に従うものです。もう 1 つは、構造化されている、Microsoft Visual C#™ または Microsoft Visual C++® の例外処理に似た方法です。

この文書は、Visual Basic での開発初心者、および旧バージョンの Visual Basic から Visual Basic .NET に移行しようとしている開発者を対象としており、構造化例外処理および非構造化例外処理の概要について説明します。適切な例外の処理方法を選択するうえで考慮すべきこと、それらの方法へのアプローチ、独自に例外を作成する方法、例外オブジェクトのプロパティなどを説明します。この文書を読めば、コードに例外処理を組み込むタイミングや方法を理解できます。

エラーと例外の定義

エラーと例外の 2 つの用語はよく混同して使用されることがあります。実際はエラーとは、コード実行中に発生するイベントであり、コードの正常なフローを中断し、例外オブジェクトを作成するものです。エラーによってフローが中断されると、プログラムは例外ハンドラを探します。例外ハンドラは、エラーへの対応方法を指示するコードのブロックであり、フロー回復を支援するものです。つまり、エラーとはイベントであり、例外はイベントが作り出したオブジェクトということになります。

プログラマは "例外をスローする" という言い方をしますが、これは該当のメソッドがエラーに遭遇し、エラー情報およびその発生時間と場所を含む例外オブジェクトを作成して対応した、という意味です。エラーおよびそれに続く例外を引き起こす要因としては、ユーザー エラー、リソース エラー、プログラミングの論理エラーなどがあります。このようなエラーは、コードが特定のタスクをどのように処理するかに依存し、タスクそのものの目的とは関係ありません。

この文書では "例外処理" の定義を、エラーによって作成された例外の解釈と対応、とします。

構造化例外処理と非構造化例外処理 - どのような場合にどちらを使用するか

構造化例外処理は単に、例外を含む制御構造、独立したコードのブロック、およびフィルタを使用して、例外処理メカニズムを作成します。これにより、コードはエラーの種類を区別でき、状況に応じてそのエラーに対応できます。非構造化例外処理では、コードの最初の On Error ステートメントによってすべての例外が処理されます。

非構造化例外処理より、構造化例外処理の方がはるかに用途が広く、強力でフレキシブルです。可能な場合はできるだけ、構造化例外処理を使用してください。ただし、以下のような状況では、非構造化例外処理を使用することもあります。

  • 旧バージョンの Visual Basic で作成されたアプリケーションをアップグレードする場合
  • アプリケーション開発の初期段階などで、プログラムが正常にシャットダウンしなくてもかまわない場合
  • 何が例外を引き起こすか、事前にはっきりわかっている場合
  • 納期が迫っており、時間を節約したい場合
  • コードがたいしたものではなく、短いものであり、コードの分岐での例外生成のみをテストすればよい場合
  • 構造化例外処理ではサポートされていない Resume Next ステートメントを使用する必要がある場合

同じ関数で、構造化例外処理と非構造化例外処理を組み合わせることはできません。On Error ステートメントを使用する場合、同じ関数で Try...Catch ステートメントは使用できません。

コード内でどちらの例外処理を使用する場合でも、そのコードが想定しているものを見極める必要があります。たとえば、アプリケーションでユーザーが電話番号を入力する場合、次のような状況を想定することができます。

  • ユーザーは、文字ではなく数字を入力する。
  • 番号には特定の形式がある。
  • ユーザーは NULL 値を入力しない。
  • ユーザーが入力する電話番号は 1 つのみである。

ユーザーの入力は、上記の想定のいずれか、またはすべてと相反する場合があります。そのような場合でも、スムーズにアプリケーションが復帰できるよう、コードには適切な例外処理が必要です。

どのような状況でもメソッドは例外を返さないと断言できない限り、適切な情報を提供する例外処理を用意してください。例外処理はとても大切な役割を果たします。例外処理の結果メッセージは、エラーの現象だけでなく、その原因と場所についても示すようにします。"エラーが発生しました" のような情報の少ないメッセージでは、ユーザーが欲求不満に陥ります。

構造化例外処理

構造化例外処理はコードの特定部分をテストし、例外が発生すると、その例外を引き起こした状況に対して例外処理コードを適用します。大きなアプリケーションでは非構造化例外処理よりもはるかに高速な処理が可能で、フレキシブルにエラーに対応し、アプリケーションの信頼性も高まります。

Try...Catch...Finally 制御構造は、構造化例外処理の柱となります。コードの一部をテストし、そのコードの実行によって発生して例外をフィルタし、返された例外の種類に基づいて対応します。

Try...Catch...Finally ブロック

Try...Catch...Finally 制御構造はコードの一部をテストし、エラー処理方法をカテゴリ別にアプリケーションに指示します。この構造の 3 つの構成部分にはそれぞれ独自の役割があります。

  • Try ステートメントは、例外のテスト対象となるコードを指定します。
  • Catch 句は、特定の例外に関連付けられたコードのブロックを特定します。Catch When ブロックは、特定状況において実行するコードを指示します。When なしの Catch 句はどの例外にも対応します。したがってコードでは、特定の種類の例外に対応する一連の Catch...When ステートメントがあり、その後にその Catch...When では扱われない例外に対応する一般的な Catch ブロックが続く、という場合が考えられます。
  • Finally ステートメントには、Try ブロックでの例外発生の有無にかかわらず実行するコードが含まれます。Finally ステートメントは、Exit Try または Exit Sub の後でも実行されます。このコードの主な用途は、ファイルの終了やバッファのクリアといったクリーンアップ作業です。

Catch 句の機能

Catch 句には、Catch、Catch...As、および Catch...When の 3 つの形態があります。

When なしの Catch 句の場合、関連付けられているステートメント ブロックではどの種類の例外でも処理できます。Catch...As と Catch...When 句は、特定の例外を捕捉し、関連付けられているステートメント ブロックからアプリケーションに何をすべきか指示を出せるようにします。Catch...As と Catch...When 句は、次のように 1 つのステートメントで組み合わせることができます。
Catch ex As Exception When intResult <> 0

例外がリソース エラーの結果発生したものであれば、そのリソースを特定し、可能であれば解決方法や回避方法を示します。プログラミング論理エラーによる例外の場合、できるだけスムーズにアプリケーションを終了させます。しかしユーザー エラーによる例外の場合は、ユーザーがエラーを修正した後、実行を継続できるようにします。

Catch 句は、コード内に現れる順にチェックされます。したがって、コード内では特定の例外の処理から始めて一般的な例外の処理へ移るように Catch 句を配置します。たとえば、基本型の前に型をチェックする、などです。System.Exception を処理する Catch ブロックは、他の例外を処理する可能性がなくなった後で、最後のブロックとして配置してください。

Imports System
Try
   varAvailableSeats = varAuditoriumSeats - varNumberOfGuests
   Catch ex as Exception When varAuditoriumSeats = 0
   MsgBox("会場にいすがありません!")
   Exit Sub
   Catch ex as Exception When varAvailableSeats < 0
   MsgBox("空席はありません")
   Exit Sub
   Finally MsgBox("コンサートについてのお問い合わせ、ありがとうございました")
End Try

Exception オブジェクト

Exception オブジェクトは、発生したすべての例外に関する情報を提供します。例外が返されると、Err オブジェクトのプロパティが設定され、Exception オブジェクトの新規インスタンスが作成されます。そのプロパティを参照して、コードの場所、型、および例外の原因を特定します。

Exception オブジェクトの便利なプロパティの例を挙げます。

  • HelpLink プロパティには、例外に関する詳細情報をユーザーに示す URL を保持できます。
  • Hresult プロパティでは HRESULT の取得または設定を行います。HRESULT は、例外に割り当てられた数値です。HRESULT は 32 ビットの値で、重大度コード、機能コード、およびエラー コードの 3 つのフィールドを持ちます。重大度コードは、返された値が情報、警告、エラーのいずれであるかを示します。機能コードは、システム内のどのエリアで例外が発生したかを示します。エラー コードは、エラーに割り当てられた一意の ID 番号です。
  • InnerException プロパティは、現在の例外がスローされたときに既に処理中であった例外を示す例外オブジェクトを返します。外部例外を処理するコードでは、内部例外からの情報を使用して、外部の式をより精密に処理できる場合があります。
  • Message プロパティには文字列が含まれます。この文字列は、エラーの性質とその対処法をユーザーに示すテキスト メッセージです。例外オブジェクトの作成中に、その例外に最適な文字列を入力できます。何も入力しなければ、現在のカルチャに基づいて既定の文字列が挿入され、フォーマットされます。
  • Source プロパティには、例外をスローしたオブジェクトの名前または例外が発生したアセンブリの名前を含む文字列が入ります。
  • StackTrace プロパティにはスタック トレースが入ります。これを使用して、コード内のどこでエラーが発生したか特定できます。StackTrace には、例外の発生前に呼び出されたメソッドのすべてと、呼出しが行われたソース内の行番号が一覧表示されます。
  • TargetSite プロパティには、現在の例外をスローしたメソッド名が入ります。メソッド名を取得できず、スタック トレースが Nothing でない場合は、TargetSite プロパティにはスタック トレースからのメソッド名が入ります。

構造化例外処理用に独自の例外を作成する

例外基本クラスには、2 つの事前定義されたサブクラス、System.Exception と Application.Exception があります。

.NET Framework により、System.Exception クラスから事前定義の 共通言語ランタイム例外クラスが派生します。この例外は、致命的ではないエラーが発生したとき、共通言語ランタイムによってスローされます。System.Exception は、例外の発生原因に関する情報は提供しません。

注 : 事前定義の 共通言語ランタイム例外クラスの詳細については、末尾の「表 1」 を参照してください。事前定義の例外クラス、原因、その派生クラスがまとめられています。

Application.Exception クラスから例外クラスを継承して、独自のアプリケーション例外クラスを作成できます。コーディングの基本に従って、例外のクラス名を "Exception" などの語で終わるようにしてください。たとえば、次のようにします。OutOfMoneyException あるいは TooMuchRainException など。

以下の例は、1 つの例外クラスを定義し、異なるパラメータを受け取る 3 つのコンストラクタをその例外クラスに定義したものです。

Imports System
Public Class GardenException
   Inherits System.ApplicationException
   Public Sub New()
   End Sub
   ' 例外がスローされたときにメッセージ プロパティを設定するための _
   ' Sub New を作成します。
   Public Sub New(Message As String)
      MyBase.New(Message)
   End Sub
   ' 内部例外を含める場合に使用できる Sub New を _
   ' 作成します。
   Public Sub New(Message As String, Inner As Exception)
      MyBase.New(Message)
   End Sub
End Class

注 : ユーザー定義の例外と組み合わせてリモート処理を使用する場合、コードのリモート実行にユーザー定義例外のメタデータを確実に利用できるようにしてください。アプリケーション ドメインにまたがって発生する例外も含みます。

構造化例外処理のサンプル

次のコード例は、最初に ArithmeticException をチェックし、次に一般例外をチェックする簡単な Try...Catch ブロックです。

Imports System 

   Sub Main()
      Dim x As Integer = 0
      Try
         Dim y As Integer = 100 / x
      Catch ex As ArithmeticException
         MessageBox.Show(ex.Message)
      Catch ex As Exception
         MsgBox(ex.Message)
      End Try
   End Sub 'Main

次のコード例は、ファイルを開いて調べるアプリケーションに関連した Try...Catch...Finally ブロックです。Finally ステートメントが、Exit Sub の後でも実行されることに注意してください。

Imports System
   Sub OpenMyFile
      Dim thisFile As Object
      Try
         FileOpen(1, thisFile, OpenMode.Input)
      Catch ex As Exception
         MsgBox (ex.Message)
         Exit Sub
      Finally 
         FileClose(1)
      End Try
   End Sub

非構造化例外処理

非構造化例外処理は、Err オブジェクトと 3 つのステートメント、On Error、Resume、および Error を使用して実装されます。On Error ステートメントは、スローされた例外をすべて捕捉する例外ハンドラを 1 つ確立します。その後、ハンドラの位置を変えることはできますが、一度に持てるハンドラは 1 つのみです。メソッドは、最後にスローされた例外と、最も間近の例外ハンドラ位置を記録しています。メソッドのエントリにより、例外と例外ハンドラの位置が Nothing に設定されます。

コードにランタイム エラーを生成するには、Raise メソッドを使用します。Exit Sub、Exit Function、Exit Property、Resume、または Resume Next ステートメントがエラー処理ルーチンで使用された場合は常に、Err オブジェクトのプロパティが 0 または長さが 0 の文字列にリセットされます。これらのステートメントがエラー処理ルーチン外で使用されても、プロパティはリセットされません。必要な場合は、Clear メソッドを使用して Err オブジェクトをリセットできます。

Error オブジェクト

Err オブジェクトのプロパティの値は、発生したエラーによって決まります。以下の表は、プロパティのそれぞれを簡単に説明したものです。

プロパティ名 説明
Description エラーを簡単に説明するテキスト メッセージです。
Helpcontext ヘルプ ファイルのトピックのコンテキスト ID を含む整数です。
Helpfile ヘルプ ファイルへの完全パスを含む文字列式です。
LastDLL ダイナミック リンク ライブラリ (DLL) を呼び出して得られたシステム エラー コードです。これは、エラー発生前の最も間近に呼び出された DLL です。
Number エラーを特定する数値です。
Source エラーを生成したオブジェクトまたはアプリケーションを示す文字列式です。

以下の例は、非構造化例外処理でこれらのプロパティをどのように使用するか示したものです。

  On Error
 Resume Next
Err.Clear
Err.Raise(33333)
Err.Description = "番号を入力していません。"
MsgBox(Err.Number)
MsgBox(Err.Description)
Msg = "F1 キーまたはヘルプ ボタンを押して " & Err.HelpFile & " トピックで " & _
" 以下の HelpContext を参照: " & Err.HelpContext
MsgBox(Msg)

On Error GoTo ステートメント

On Error GoTo ステートメントにより、例外処理のルーチンが有効になり、プロシージャ内のそのルーチンの位置が示されます。ラベルまたは行番号を使用して、コードを特定の例外処理ルーチンに導きます。-1 により、プロシージャ内のエラー処理が無効になります。0 により、現在の例外が無効になります。On Error ステートメントがなく、現在のコール スタックにあるメソッドでは例外を処理できない場合、ランタイム エラーは致命的になります。実行が中止され、メッセージが表示されます。

以下の表は、On Error GoTo ステートメントの機能をまとめたものです。

ステートメント 機能
On Error Goto -1 Err オブジェクトを Nothing にリセットし、ルーチンのエラー処理を無効化します。
On Error Goto 0 最後の例外ハンドラ位置を Nothing にリセットし、例外を無効化します。
On Error Goto <ラベル名> 指定したラベルを例外ハンドラの位置として設定します。
On Error Resume Next Resume Next 動作を、最も間近の例外ハンドラの位置に確立します。

Resume と Resume Next

Resume ステートメント自体で、例外の原因となったステートメントにコントロールを返すことができます。実行は、最初に例外を引き起こした行から再開されます。

対照的に、Resume Next ステートメントは、例外の発生した行の次から実行を再開します。これは、例外の発生時、例外が発生したそのすぐ後のステートメントにコントロールを渡すように指示します。Resume Next を使用すると、軽微なエラーを許容できます。エラーを起こしたステートメントに問題があってもアプリケーションは実行を続け、ユーザーはエラーを修正して継続することができます。同様に Resume <ラベル> は、"行" の引数で指定されたラベルにコントロールを渡します。複数の関数をまたいで行ラベルを配置することはできないので、指定したラベルとそれを呼び出すコードが同じプロシージャ内にあるようにしてください。

Resume は、エラー処理ルーチンにのみ使用します。他のルーチンで使用するとエラーが発生します。

Error ステートメント

Error ステートメントは、旧バージョンの Visual Basic との互換性のために Visual Basic .NET でサポートされています。新しいコードでは、Err オブジェクトの Raise メソッドを使用してランタイム エラーを生成してください。

非構造化例外処理のサンプル

以下の例は、非構造化例外処理の基本的アプローチを示したものです。サブルーチン FlawlessCode でエラーが発生すると、実行は Whoops に移ります。Whoops は、エラーに関する情報をユーザーに提供します。具体的には、Err オブジェクトの Description プロパティの内容を知らせます。

Private Sub FlawlessCode()
   On Error Goto Whoops
   ' このコードではさまざまな処理を実行します。
   ' ここではエラー処理コードの内容には触れません。
   Return
Whoops:
   ' ユーザーにエラー情報を提供します。
   MsgBox ("予期しないエラー:" & Err.Description)
   Return
End Sub

以下の例は、Err オブジェクトを使用して、エラー メッセージを表示するダイアログ ボックスを作成する方法を示したものです。

Dim ErrorMessage as String
' エラーが発生した場合、エラー メッセージを作成します。
On Error Resume Next
Err.Raise (13) ' MisMatch 型のエラーを生成します。
' エラーが発生したかチェックします。発生した場合は、メッセージを表示します。
If Err.Number <> 0 Then
   ErrorMessage = "エラー # " & Str(Err.Number) & " が、以下で発生しました。" _
      & Err.Source & vbCrLf & Err.Description
' メッセージを重要メッセージとして表示します。
   MsgBox(ErrorMessage, MsgBoxStyle.Critical, "エラー")
End If

まとめ

Visual Basic .NET の非構造化例外処理と構造化例外処理の違い、構造化例外処理の利点について説明してきました。一般的に、構造化例外処理でほとんどのニーズは満たせますが、場合によっては非構造化例外処理を使用することもあります。

例外を確実に処理することは大事ですが、例外のスローに没頭するのも考えものです。これではパフォーマンスに影響するおそれがあります。Try 構造は、作成が簡単でわかりやすく、効率的なコードを作成できます。例外が 1 つ以上発生する可能性のある場合に使用してください。このアプローチは非常に魅力的ですが、通常の条件で、If ステートメントや Select ステートメントの代わりに例外を使用して論理フローを制御する誘惑に駆られることもあります。例外処理は効率的ですが、実際に例外が発生する条件でのみ使用してください。

例外処理の詳細については、まず以下の 3 つのトピックに目を通してください。

コンポーネントからの例外のスロー

例外処理の実施

エラー処理

以下の表は、事前定義の例外クラス、その発生原因、およびその派生クラスをまとめたものです。

表 1

例外クラス スローされるタイミング 派生クラス
AppDomainUnloadedException アンロードされたアプリケーション ドメインにアクセスしようとしたとき なし
ArgumentException メソッドに渡された引数が 1 つ以上無効であるとき ArgumentNullException

ArgumentOutOfRangeException

ComponentModel.InvalidEnum
ArgumentException

DuplicateWaitObjectException

ArithmeticException 演算処理、キャスト、または変換処理でエラーが発生したとき DivideByZeroException

NotFiniteNumberException

OverflowException

ArrayTypeMismatchException 配列内で不正な型の要素を保存しようとしたとき なし
BadImageFormatException DLL または実行可能プログラムのファイル イメージが無効なとき なし
CannotUnloadAppDomainException アプリケーション ドメインのアンロードに失敗したとき なし
ComponentModel.Design.Serialization
CodeDomSerializerException
シリアル化エラーの行番号情報が存在するとき なし
ComponentModel.LicenseException コンポーネントにライセンスを許可できないとき なし
ComponentModel.WarningException 例外がエラーではなく、警告として処理されたとき なし
Configuration.ConfigurationException 構成の設定でエラーが発生したとき なし
Configuration.Install.InstallException インストールのコミット、ロールバック、またはアンインストールの段階でエラーが発生したとき なし
ContextMarshalException コンテキストの境界をまたいだ、1 つのオブジェクトに対するマーシャリングが失敗したとき なし
Data.DataException ADO.NET コンポーネントにより、エラーが生成されたとき Data.ConstraintException

Data.DeletedRowInaccessibleException

Data.DuplicateNameException

Data.InRowChangingEventException

Data.InvalidConstraintException

Data.InvalidExpressionException

Data.MissingPrimaryKeyException

Data.NoNullAlllowedException

Data.ReadOnlyException

Data.RowNotInTableException

Data.StringTypingException

Data.TypedDataSetGeneratorException

Data.VersionNotFoundException

Data.DBConcurrencyException 更新処理の結果、更新された行がないことを DataAdapter が検知したとき なし
Data.SqlClient.SqlException SQL Server が警告またはエラーを返したとき なし
Data.SqlTypes.SqlTypeException Data.SqlTypes の基本例外クラス Data.SqlTypes.SqlNullValueException

Data.SqlTypes.SqlTruncateException

Drawing.Printing.InvalidPrinterException 無効なプリンタ設定でプリンタにアクセスしようとしたとき なし
EnterpriseServices.RegistrationException 登録エラーが検出されたとき なし
EnterpriseServices.Serviced
ComponentException
サービス コンポーネントでエラーが検出されたとき なし
ExecutionEngineException 共通言語ランタイムの実行エンジンで内部エラーが発生したとき なし
FormatException 引数の形式が、呼び出されたメソッドのパラメータ仕様を満たさないとき Net.CookieException

Reflection.CustomAttribute
FormatException

UriFormatException

IndexOutofRangeException 配列範囲外のインデックスを使用して配列の要素にアクセスしようとしたとき なし
InvalidCastException 無効なキャストまたは明示的な変換を実行したとき なし
InvalidOperationException オブジェクトの現在の状態では、メソッドの呼出しが無効なとき Net.ProtocolViolationException

Net.WebException

ObjectDisposedException

InvalidProgramException プログラムに無効な Microsoft 中間言語またはメタデータが含まれているとき なし
IO.InternalBufferOverflowException 内部バッファでオーバーフローが発生したとき なし
IO.IOException I/O エラーが発生したとき IO.DirectoryNotFoundException

IO.EndOfStreamException

IO.FileLoadException

IO.FileNotFoundException

IO.PathTooLongException

Management.ManagementException 管理エラーが発生したとき なし
MemberAccessException クラス メンバへのアクセスに失敗したとき FieldAccessException

MethodAccessException

MissingFieldException

MissingMemberException

MissingMethodException

MulticastNotSupportedException NULL 参照ではないオペランドを持つ、組合せ不可能な代理タイプ 2 つを結合しようとしたとき なし
NotImplementedException 要求されたメソッドまたは操作が実装されていないとき なし
NotSupportedException 呼び出したメソッドがサポートされていないとき、または呼び出した機能をサポートしないストリームに対する読み取り、検索、または書き込みを実行しようとしたとき PlatformNotSupportedException
NullReferenceException NULL オブジェクト参照を解除しようとしたとき なし
OutOfMemoryException プログラムの実行を完了するためのメモリが不足しているとき なし
RankException 間違った次元数の配列がメソッドに渡されたとき なし
Reflection.AmbiguousMatch
Exception
バインド条件に合致した複数メソッドで、いずれかのメソッド結果にバインドしたとき なし
Reflection.ReflectionType
LoadException
モジュール内の 1 つ以上のクラスが読み込めないことを、Module.GetTypes メソッドが検知したとき なし
Resources.MissingManifest
ResourceException
メイン アセンブリにニュートラル カルチャのリソースが含まれていないにもかかわらず、適切なサテライト アセンブリがないためにそのリソースが要求されたとき なし
Runtime.InteropServices.
ExternalException
COM 相互運用機能の例外と構造化例外処理の例外に対する基本例外タイプ ComponentModel.Design.
CheckoutException

ComponentModel.Win32Exception

Data.OleDb.OleDbException

Messaging.MessageQueueException

Runtime.InteropServices.COMException

Runtime.InteropServices.SEHException

Web.HttpException

Runtime.InteropServices.
InvalidComObjectException
無効な COM オブジェクトが使用されたとき なし
Runtime.InteropServices.
InvalidOleVariantTypeException
Marshaler が、マネージ コードにマーシャリングできない変数タイプの引数を検出したとき なし
Runtime.InteropServices.
MarshalDirectiveException
Marshaler が、サポートしていない MarshalAsAttribute を検出したとき なし
Runtime.InteropServices.
SafeArrayRankMismatchException
受信した SAFEARRAY の順位が、マネージされたサインで指定されている順位と合致しないとき なし
Runtime.InteropServices.
SafeArrayTypeMismatchException
受信した SAFEARRAY のタイプが、マネージされたサインで指定されているタイプと合致しないとき なし
Runtime.Remoting.RemotingException リモート処理でエラーが発生したとき Runtime.Remoting.Remoting
TimeOutException
Runtime.Remoting.ServerException クライアントが、例外をスローできない .NET framework 以外のアプリケーションと接続して、例外と通信した場合に使用 なし
Runtime.Serialization.SerializationException シリアル化またはシリアル解除中にエラーが発生したとき なし
Security.Crytography.CryptographicException 暗号処理中にエラーが発生したとき Security.Cryptography.
CryptographicUnexpected
OperationException
Security.Policy.PolicyException ポリシーにより、コードの実行が禁止されているとき なし
Security.SecurityException セキュリティ エラーが検出されたとき なし
Security.VerificationException セキュリティ ポリシーにより、タイプ セーフなコードが要求されている状態で、確認プロセスではコードがタイプ セーフであることを確認できないとき なし
Security.XmlSyntaxException XML 解析で構文エラーが発生したとき なし
ServiceProcess.TimeoutException 指定のタイムアウトを超過したとき なし
StackOverflowException 保留中のメソッド呼出しが多すぎるため、実行スタックがオーバーフローしたとき なし
Threading.SynchronizationLockException 同期化されたメソッドを、非同期のコード ブロックから呼出したとき なし
Threading.ThreadAbortException Abort メソッドを呼出したとき なし
Threading.ThreadInterruptedException WaitSleepJoin 状態でスレッドが中断したとき なし
Threading.ThreadStateException メソッド呼出しに対して、無効な ThreadState のスレッドがあるとき なし
TypeInitializationException クラス初期化式によりスローされた例外のラッパーとして例外がスローされたとき なし
TypeLoadException タイプの読み込みエラーが発生したとき DllNotFoundException

EntryPointNotFoundException

TypeUnloadedException アンロードされたクラスにアクセスしようとしたとき なし
UnauthorizedAccessException I/O エラーまたは特定タイプのセキュリティ エラーのため、オペレーティング システムがアクセスを拒否したとき なし
Web.Services.Protocols.SoapException SOAP によって呼び出された WML Web Services メソッドの結果としてエラー発生 Web.Services.Protocols.
SoapHeaderException
Xml.Schema.XmlSchemaException   なし
Xml.XmlException   なし
Xml.Xpath.XpathException Xpath 式の処理中にエラー発生 なし
Xml.Xsl.XsltException XSL 変換処理中にエラー発生 System.Xml.Xsl.XsltCompileException