c exception handling tutorial with code examples
例外処理は、プログラムの実行中に発生する可能性のあるエラーを処理する方法です。このチュートリアルでは、コード例を使用してC#での例外処理について説明します。
レジストリエラーを修正するためのフリーソフトウェア
例外処理は、ランタイムエラーが発生した場合でもプログラムフローが継続されるようにするために使用されます。例外は、ランタイムエラーが発生したときにスローされるオブジェクトです。
例外が処理されない場合、C#は例外メッセージを生成し、プログラムを終了します。ここで例外処理が重要になります。
学習内容:
例外とは何ですか?
例外は、実行時にプログラム内で発生する可能性のある前例のないエラーです。ほとんどの場合、プログラマーは、検証やnullチェックなどのエラーの一部を、または一部の値の検証中に簡単に検出できます。
ただし、エラーがいつ、何が表示されるかを予測できない場合があります。 例えば、 ある場所でファイルを探しているとしましょう。私のプログラムは、ファイルが存在するまで完全に正常に実行され、何らかの理由でファイルが削除された場合、私のプログラムはエラーをスローします。
例外は定期的に発生するわけではありませんが、それでも発生する可能性があるため、常に慎重に処理する必要があります。これらを処理するために、例外処理を使用します。
エラーが発生するたびに、それがスローされたと言います。「スローされた」はからのオブジェクトです。 System.Exception C#のクラス。ザ・ System.Exception クラスは、プログラムで発生したエラーの詳細を示すさまざまなメソッドとプロパティを提供します。
jsonファイルを開く方法
問題が発生したスタックを提供するスタックトレースプロパティや、例外の説明を提供するメッセージプロパティと同様です。
例外処理のキーワード
例外は、プログラムの特定の部分を制御するプロセスを提供します。そのため、その部分に例外があった場合でも、プログラムの制御はプログラムの別の部分に移されます。 C#では、例外処理は基本的に4つのキーワードを中心に構築されています。 投げて、試して、捕まえて、最後に 。
スロー
すでに説明したように、throwはからのオブジェクトです System.Exception C#のクラス。これにより、プログラムはエラーが発生するたびにエラーをスローできます。
試してみてください
tryブロックは、プログラムが例外をスローする原因となる可能性のあるコードのブロックを囲みます。その後に1つ以上のキャッチブロックが続きます。
キャッチ
tryブロックで例外が発生すると、catchブロックに例外をキャッチするための制御が提供されます。 catchブロックには、例外の場合にプログラムが実行する必要のある一連のコードを含めることもできます。または、シナリオと要件に応じて、例外をキャッチして何もしないこともできます。
最後に
最後のブロックは、例外の発生に関係なく、特定のコードスニペットまたは命令を実行するために使用されます。最後に、ブロックは常に実行されます。プログラムが例外を検出しなかった場合は、tryingブロックの直後に実行されるか、プログラムが例外をキャッチすると、catchブロックの後に実行されます。
C#に存在する例外クラス
C#のすべての例外は、直接または間接的に System.Exception クラス。
最も一般的な例外のいくつかを簡単に見てみましょう。
- System.IO.IOException: 入出力関連のエラーを処理します。
- System.DividedByZeroException: 数値がゼロで除算されたときにスローされるエラーを処理します。
- System.NullReferenceException :nullオブジェクトが参照されたときに発生する可能性のあるエラーを処理します。
- System.IndexOutOfRangeException: プログラムが配列の範囲外のインデックスにアクセスしようとしたときにスローされるエラーを処理します。
- System.OutOfMemoryException: 不十分なメモリの存在によってスローされたエラーを処理します。
C#での例外処理
C#には、try andcatchブロックを使用して発生する可能性のあるあらゆるタイプの例外を処理するための非常に明確なソリューションがあります。このブロックを使用すると、プログラムのコアステートメントを他のステートメントから分離できます。
例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string() args) { try { File.OpenRead('InvalidFile'); } catch (FileNotFoundException ex) { Console.WriteLine(ex.ToString()); } Console.ReadLine(); } } }
上記の例では、tryブロックの下にファイルを開くためのコードを同封しています。有効なファイルパスが指定されていないため、コードはエラーをスローするはずです。これで、catchブロックでエラーをキャッチしました。指定されたファイルパスにファイルが存在しない場合、コードはFileNotFoundExceptionをスローします。
この例外は、予期される例外をすでに定義しているcatchブロックによってキャッチされます。ここで、コードがすでに定義したもの以外の例外をスローした場合、ブロックはそれをキャッチできないと想像してみましょう。一般的な例外をキャッチするために、別のキャッチブロックを追加します。
更新されたコードを見てみましょう。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string() args) { try { File.OpenRead('InvalidFile'); } catch (FileNotFoundException ex) { Console.WriteLine(ex.ToString()); } catch (Exception e) { Console.WriteLine(e.ToString()); } Console.ReadLine(); } } }
この汎用catchブロックは、tryブロック内でスローされる可能性のあるすべての例外をキャッチできます。それでは、これを完了するために、finallyブロックも追加しましょう。簡単にするために、finallyブロックを使用してメッセージを出力します。
無料アニメを見るのに最適な場所
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string() args) { try { File.OpenRead('InvalidFile'); } catch (FileNotFoundException ex) { Console.WriteLine(ex.ToString()); } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { Console.WriteLine('Finally block executed'); } Console.ReadLine(); } } }
ここでは、簡単なメッセージでfinallyブロックを追加しました。ブロックにいくつかのカスタムステートメントを追加することもできます。ただし、プログラムの全体的な構造は、ここに表示されているものと同じままです。
Finalブロックは、例外があるかどうかに関係なく、常に実行されます。プログラムはtryブロックから開始し、エラー/例外がない場合はfinallyブロックに直接移動します。例外が発生した場合、最初にキャッチに移動し、次に最後のブロックを実行します。
finishブロックが実行されない条件はありますか?
名前が示すように、最後のブロックは最後に実行され、実行されるコードの最後のブロックです。最後に、アプリケーションの実行中は常にブロックが実行されます。 finallyブロックが実行されないのは、アプリケーションがクラッシュするか、プロセスコマンドを使用して意図的に強制終了された場合のみです。
結論
例外が適切に処理されない場合、プログラム内でエラーが発生します。コード内のどこにもtry / catchブロックを使用していない場合、プログラムは例外を示すメッセージで中止されます。一般的なユーザーにとって、これはエラーをソースコードまでさかのぼって解決することは非常に困難です。
したがって、プログラムで例外処理を提供することは常に良い習慣です。
サンプルコード
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string() args) { try { File.OpenRead('InvalidFile'); } catch (FileNotFoundException ex) { Console.WriteLine(ex.ToString()); } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { Console.WriteLine('Finally block executed'); } Console.ReadLine(); } } }
=> ここで完全なC#トレーニングシリーズを参照してください