【C#】例外処理クラスの一覧まとめ(サンプルコード付き)【.NET Framework】

【C#】例外処理クラスの一覧まとめ

例外エラーはコードが想定外の扱われ方をすると発生しますが、そのエラーにもいくつか種類があります。メソッドへ渡す引数が間違っていたり、存在しないデータにアクセスしたり、配列に対して範囲を超えたインデックスを指定したりと様々です。

本記事では様々ある例外処理のクラスを簡単なサンプルコードと共にまとめました。Microsoft Docs のドキュメントを参考に作成しています。

参考 Exception クラスMicrosoft Docs

ArgumentException

メソッドの引数が不正な値だった場合のエラー。

引数が null の場合は ArgumentNullException が呼ばれます。
引数が有効な値の範囲外の場合は ArgumentOutOfRangeException が呼ばれます。

void Sample()
{
	var list = new List<string>();
	string[] tmp = new string[0];
	list.Add("A");
	list.CopyTo(tmp); // ArgumentException エラー: Destination array was not long enough. Check destIndex and length, and the array's lower bounds
}

ArgumentNullException

メソッドの引数が null の場合のエラー。

void Sample()
{
	string str = null;
	Debug.Log(int.Parse(str)); // ArgumentNullException エラー: Value cannot be null.
	Debug.Log(Convert.ToInt32(str)); // これは 0 になるので OK
}

ArgumentOutOfRangeException

メソッドの引数が有効な値の範囲外だった場合のエラー。

void Sample()
{
	var numbers = new int[] { 1, 2, 3 };
	int num = numbers[5]; // IndexOutOfRangeException エラー: Index was outside the bounds of the array.
}

DirectoryNotFoundException

ファイルまたはディレクトリの一部が見つからない場合のエラー。

void Sample()
{
	string logFile = "Resources/Sample.txt"; // 存在しないファイルパス
	string logData = File.ReadAllText(logFile); // DirectoryNotFoundException エラー: Could not find a part of the path "/(略)/Resources/Sample.txt".
}

DivideByZeroException

整数等を 0 で割り算しようとした場合のエラー。

void Sample()
{
	int a = 2;
	int b = 0;
	int num = a / b; // DivideByZeroException エラー: Attempted to divide by zero.
}

DriveNotFoundException

使用できないドライブ、あるいは共有にアクセスしようとした場合のエラー。

FileNotFoundException

ディスク上に存在しないファイルにアクセスした場合のエラー。

void Sample()
{
	string filePath = "/hoge"; // 存在しないパス
	StreamReader sr = new System.IO.StreamReader(filePath);
	string fileData = sr.ReadToEnd(); // FileNotFoundException エラー: Could not find file "/hoge"
}

FormatException

引数の形式が無効である場合や、文字列の Parse 処理に失敗したとき等のエラー。

void Sample()
{
	string num = "10";
	Debug.Log(int.Parse(num)); // -> 10

	string num2 = "ABC";
	Debug.Log(int.Parse(num2)); // FormatException エラー: Input string was not in a correct format.
}

IndexOutOfRangeException

配列やコレクションのインデックスが範囲外の場合に起こるエラー。

void Sample()
{
	int[] nums = new int[] { 1, 2, 3 };
	Debug.Log(nums[0]); // -> 1
	Debug.Log(nums[2]); // -> 3
	Debug.Log(nums[5]); // IndexOutOfRangeException エラー: Index was outside the bounds of the array.
}

InvalidOperationException

引数以外の原因で無効なメソッド呼び出しが起きた場合のエラー。

void Sample()
{
	var nums = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	foreach (var num in nums)
	{
		if (num == 5)
		{
			nums.Remove(num); // InvalidOperationException エラー: Collection was modified; enumeration operation may not execute.
		}
	}
}

KeyNotFoundException

コレクション内の要素に指定されたキーが見つからなかった場合のエラー。

void Sample()
{
	var dictionary = new Dictionary<string, int>();
	dictionary.Add("one", 1);
	dictionary.Add("two", 2);
	dictionary.Add("three", 3);

	Debug.Log(dictionary["one"]); // -> 1
	Debug.Log(dictionary["four"]); // KeyNotFoundException エラー: The given key was not present in the dictionary.
}

NotImplementedException

メソッドまたは操作が実装されてない場合のエラー。

static void func1()
{
	throw new NotImplementedException("Not Implemented");
}

static void func2()
{
	throw new NotImplementedException("Not Implemented");
}

static void func3()
{
	throw new NotImplementedException("Not Implemented");
}

void Sample(int i)
{
	switch (i)
	{
		case 1: func1(); break;
		case 2: func2(); break;
		case 3: func3(); break;
		default: break;
	}
}

NotSupportedException

メソッドまたは操作がサポートされてない場合のエラー。

ObjectDisposedException

Dispose 済のオブジェクトに対して操作が行われた場合のエラー。

void Sample()
{
	MemoryStream ms = new MemoryStream(16);
	ms.Dispose();
	ms.ReadByte(); // ObjectDisposedException エラー: Cannot access a closed Stream.
}

OverflowException

算術演算やキャストでオーバーフローが起きた場合のエラー。

void Sample()
{
	int value = Int32.MaxValue;
	try
	{
		checked
		{
			value += 1;
		}
	}
	catch(OverflowException e)
	{
		Debug.Log(e.Message); // -> Arithmetic operation resulted in an overflow.
	}
}

PathTooLongException

パス名やファイル名がシステム定義の最大長を超えた場合のエラー。

完全パスが 260 文字を超えるパスは PathTooLongException の例外がスローされます。

void Sample()
{
	var sut = new DirectoryInfo(@"D:\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
	try
	{
		sut.Create();
	}
	catch (PathTooLongException e)
	{
		Debug.Log(e.Message);
	}
}

PlatformNotSupportedException

ある機能が特定のプラットフォームでサポートされてない場合のエラー。

RankException

間違った次元数の配列がメソッドに渡された場合に起こるエラー。

多次元配列を Array.Reverse メソッドで逆順にすることはできません。Array.Reverse メソッドに多次元配列を指定すると、RankException の例外がスローされます。

void Sample()
{
	int[] arr1 = {1, 2, 3, 4};
	Array.Reverse(arr1); // -> { 4, 3, 2, 1 }
	
	int[,] arr2 = new int[,]{ {1, 2}, {3, 4}, {5, 6} };
	Array.Reverse(arr2); // RankException エラー: Only single dimension arrays are supported here.
}

TimeoutException

指定した時間が経過した場合のエラー。

async void Sample()
{
	var client = new HttpClient();
	// タイムアウトの時間を3秒に設定
	client.Timeout = TimeSpan.FromSeconds(3);

	try
	{
		var response = await client.GetStringAsync("https://www.yahoo.co.jp/");
		Debug.Log(response);
	}
	catch (TaskCanceledException e)
	{
		Debug.Log(e.Message);
	}
}

UriFormatException

無効な URI が検出された場合のエラー。

URI とは?
URIは「Uniform Resource Identifier」の略です。Web上のあらゆるファイルを認識するための識別子の総称で、URNとURLで構成されています。

例外エラー早見表

例外エラー内容
ArgumentExceptionメソッドの引数が不正な値のエラー
ArgumentNullExceptionメソッドの引数が null のエラー
ArgumentOutOfRangeExceptionメソッドの引数が有効な値の範囲外のエラー
DirectoryNotFoundExceptionファイルやディレクトリが見つからないエラー
DivideByZeroException0 で割り算しようとした場合のエラー
DriveNotFoundException使用できないドライブや共有にアクセスした際のエラー
FileNotFoundExceptionディスク上に存在しないファイルへのアクセスエラー
FormatException引数が無効な場合や文字列の Parse 処理失敗時のエラー
IndexOutOfRangeException配列やコレクションのインデックスが範囲外のエラー
InvalidOperationException引数以外の原因で無効なメソッド呼び出しエラー
KeyNotFoundExceptionコレクション内にキーが見つからない場合のエラー
NotImplementedExceptionメソッドまたは操作が実装されてない場合のエラー
NotSupportedExceptionメソッドまたは操作がサポートされてない場合のエラー
ObjectDisposedExceptionDispose 済のオブジェクトに対しての操作エラー
OverflowException算術演算やキャストでオーバーフローが起きた場合のエラー
PathTooLongExceptionパス名やファイル名が定義の最大長を超えた場合のエラー
PlatformNotSupportedException機能が特定のプラットフォームでサポートされてない場合のエラー
RankException間違った次元数の配列がメソッドに渡された際のエラー
TimeoutException指定した時間が経過した場合のエラー
UriFormatException無効な URI が検出された場合のエラー