C#の例外処理入門:try・catch・finallyの使い方をわかりやすく解説
C#における例外(Exception)とは、プログラムの実行中に発生する例外的な状況への対応を指します。代表的な例としては、ゼロ除算(0での割り算)の試みなどが挙げられます。
C#では、例外処理を以下のキーワードを使って実装します。
例外処理に使う3つのキーワード
- try − 例外が発生する可能性のあるコードブロックを特定します。tryブロックには、1つ以上のcatchブロックが続きます。
- catch − プログラム内で問題を処理したい箇所に例外ハンドラーを配置し、例外を捕捉します。catchキーワードは例外の捕捉を示します。
- finally − 例外がスローされたかどうかにかかわらず、必ず実行したい一連のステートメントを記述します。たとえばファイルを開いた場合、例外の有無に関係なく必ず閉じる必要があります。このような後処理にfinallyブロックが適しています。
C#での例外処理のサンプルコード
以下は、C#で例外を処理する方法を示す具体例です。
using System;
namespace ErrorHandlingApplication {
class DivNumbers {
int result;
DivNumbers() {
result = 0;
}
public void division(int num1, int num2) {
try {
result = num1 / num2;
} catch (DivideByZeroException e) {
Console.WriteLine("Exception caught: {0}", e);
} finally {
Console.WriteLine("Result: {0}", result);
}
}
static void Main(string[] args) {
DivNumbers d = new DivNumbers();
d.division(25, 0);
Console.ReadKey();
}
}
}コードの解説
このサンプルでは、まずtryブロック内で割り算を実行し、値を設定しています。次にcatchブロックで例外を捕捉します。ここではDivideByZeroExceptionを指定しているため、ゼロ除算が発生した場合にのみこのブロックが実行されます。
最後にfinallyブロックで結果を表示します。finallyは例外の発生有無にかかわらず必ず実行されるため、計算結果やステータスの出力に最適です。
実行結果
上記のコードでは、引数としてd.division(25, 0)を呼び出しているため、ゼロ除算の例外が発生し、catchブロックで捕捉されます。その後、finallyブロックが実行され、以下のような出力が得られます。
Exception caught: System.DivideByZeroException: Attempted to divide by zero. at ErrorHandlingApplication.DivNumbers.division(Int32 num1, Int32 num2) Result: 0
このように、try・catch・finallyを組み合わせることで、プログラムの異常終了を防ぎつつ、リソースの解放などの確実な後処理を実現できます。例外処理は堅牢なC#アプリケーションを構築するうえで欠かせない基本的なテクニックです。
-
C#でソート済み配列から重複を削除し、重複のない配列を返す方法
配列がすでにソートされている場合、重複する要素は必ず隣接しています。この性質を利用すると、2つのポインタ(i と j)を使った効率的なアルゴリズムで重複を削除できます。ここで i はゆっくり進む「スローポインタ」、j は速く進む「ファストポインタ」として機能します。 アルゴリズムの手順 nums[i] == nums[j] の間は重複が続いているため、j を1つずつ進めて重複をスキップしていきます。 nums[j] != nums[i] となった時点で、連続した重複が終わったことを意味します。そこで、その値を nums[i + 1] にコピーし、i をインクリメントしてから同じ処理を繰り返しま
-
C#の例外処理入門:try・catch・finallyの使い方をわかりやすく解説
C#における例外(Exception)とは、プログラムの実行中に発生する例外的な状況への対応を指します。代表的な例としては、ゼロ除算(0での割り算)の試みなどが挙げられます。C#では、例外処理を以下のキーワードを使って実装します。例外処理に使う3つのキーワードtry − 例外が発生する可能性のあるコードブロックを特定します。tryブロックには、1つ以上のcatchブロックが続きます。catch − プログラム内で問題を処理したい箇所に例外ハンドラーを配置し、例外を捕捉します。catchキーワードは例外の捕捉を示します。finally − 例外がスローされたかどうかにかかわらず、必ず実行したい一