C#で例外を発生させるコードを紹介します。
概要
多くの場合、例外はライブラリのメソッドや関数の呼び出し時に引数などに問題があり、処理の実行などで問題が発生した場合に例外が発生します。例外はライブラリで発生する以外に、ユーザー側で例外を発生させることもできます。throwキーワードを利用して例外オブジェクトを作成することで、ユーザー側で例外を発生させることができます。
補足
独自の例外タイプを定義して、その例外を発生させる方法については
こちらの記事を参照して下さい。
書式
throw [例外クラスのインスタンスオブジェクト]
多くの場合、throwの直後で例外クラスのインスタンスオブジェクトを生成するため次の書式が多く利用されます。
throw new [例外クラス]([例外クラスのコンストラクタ引数], ... )
記述例
throw new ArgumentOutOfRangeException("EAC", "パラメーターの値が範囲外です。");
プログラム例
UI
下図のUIを作成します。テキストボックスとボタンを1つずつ配置します。
コード
下記のコードを記述します。button1のクリックイベントの実装がメインです。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ThrowException
{
public partial class FormThrowException : Form
{
public FormThrowException()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text.IndexOf('P') >=0){
throw new FormatException("Pの文字が含まれています");
}
}
}
}
解説
button1クリック時に下記のコードが実行されます。textBox1に入力されていた文字列に"P"の文字が含まれている場合は、入力エラーとし、throwを利用し、FormatExceptionのオブジェクトを作成し、FormatException例外を発生させます。
if (textBox1.Text.IndexOf('P') >=0){
throw new FormatException("Pの文字が含まれています");
}
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
テキストボックスに"Duck"を入力します。
[button1]をクリックします。何も起こりません。
続いてテキストボックスに"Penguin"の文字列を入力します。'P'の文字が含まれています。
[button2]をクリックすると、例外が発生します。System.FormatException の例外が発生し、メッセージ「Pの文字が含まれています」が表示されます。
例外を発生させることができました。
プログラム例:例外をキャッチする
続いて発生させた例外をキャッチさせるコードを紹介します。
UI
下図のUIを作成します。Buttonは2つ廃止されていますが、[button2]のみを利用します。
コード
下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ThrowException
{
public partial class FormThrowException : Form
{
public FormThrowException()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
try {
CheckInput(textBox1.Text);
}
catch (FormatException exc) {
textBox1.Text = "Error";
}
}
private void CheckInput(string input)
{
if (input.IndexOf('P') >= 0) {
throw new FormatException("Pの文字が含まれています");
}
}
}
}
解説
button2のClickイベントでは下記のコードが実行されます。CheckInput()メソッドで例外が発生しますので、CheckInputをtryブロックで囲み、catchで例外をキャッチします。例外が発生した場合はtextBox1に"Error"の文字列を表示します。
private void button2_Click(object sender, EventArgs e)
{
try {
CheckInput(textBox1.Text);
}
catch (FormatException exc) {
textBox1.Text = "Error";
}
}
テキストボックスに入力された値をチェックするCheckInputメソッドの実装部分です。引数に与えられた文字列内に'P'の文字が存在している場合にFormatException例外を発生させます。
private void CheckInput(string input)
{
if (input.IndexOf('P') >= 0) {
throw new FormatException("Pの文字が含まれています");
}
}
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
テキストボックスに"CLOSE"の文字列を入力します。
[button2]をクリックします。何も起きないことが確認できます。
続いてテキストボックスに"OPEN"の文字列を入力します。文字列中に'P'の文字があります。
[button2]をクリックします。例外が発生しますが、キャッチされるためデバッガが停止せず、catchブロック内の処理が実行され、テキストボックスに"Error"の文字列が表示されます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2023-04-06
作成日: 2017-11-14