C# PR

【C#】TryGetValueはKeyの存在チェックしたついでに値を取得します

アイキャッチ(c_sharp)
記事内に商品プロモーションを含む場合があります

プログラミングにおいて、データの検索や管理は重要な役割を果たします。
特に、C#を使用する際には、コレクションからのデータアクセスを効率的かつ安全に行うために、「TryGetValueメソッド」が頻繁に活用されます。

この記事では、TryGetValueメソッドの基本から使い方、さらにはキーが存在しない場合のデフォルト値の扱いに至るまでを、実例と共にご紹介します。
開発の幅を広げるTryGetValueメソッドの魅力に、ぜひ触れてみてください。

TryGetValueメソッドとは

C#においてTryGetValueメソッドは、辞書型コレクションDictionaryクラスの中心的機能です。
キーと値のペアを扱うこのコレクションで、特定のキーが存在するかを確認し、存在する場合にはそのキーに結びつけられた値を安全に取り出すために用いられます。

このメソッドがもつ大きな特長は、キーの有無をチェックしながら値の取得を一度の操作で行えることです。
それにより、例外を投げることなく、プログラムの安定性を向上させることが可能になります。

続くセクションで、TryGetValueメソッドの具体的な使い方やそのメリットを、例を交えて詳細にご紹介していきます。

TryGetValueの使い方

TryGetValueメソッドの使用法をマスターすることは、C#での安定したプログラム作成において非常に重要です。

このメソッドを使用すると、Dictionary内に特定のキーが存在するかどうかを調べつつ、そのキーに関連付けられた値を取得できます。
キーが見つかった場合はその値を取得し、見つからなければ何もせずに処理を続行することができるため、エラーハンドリングを煩雑にせずにスムーズなデータアクセスが可能になります。

具体的なコード例をもって、TryGetValueメソッドの実装方法を見ていきましょう。


var phoneBook = new Dictionary<string, string>
{
	{ "山田太郎", "090-1234-5678" },
	{ "田中花子", "080-9876-5432" }
};

if (phoneBook.TryGetValue("山田太郎", out var number))
{
	Console.WriteLine($"山田太郎の電話番号は{number}です。");
}
else
{
	Console.WriteLine("山田太郎の電話番号が見つかりません。");
}

var result = phoneBook.TryGetValue("鈴木一郎", out var number2)
? $"鈴木一郎の電話番号は{number2}です。"
: "鈴木一郎の電話番号が見つかりません。";
Console.WriteLine(result);

このコードスニペットは、電話帳としてDictionaryを定義し、TryGetValueメソッドを用いて特定の名前に対する電話番号を安全に取得する過程を示しています。
キーが見つかればtrueが返され、outパラメータを介して値が取得されます。見つからない場合にはfalseが返され、outパラメータにはデフォルト値が設定される構造です。
結果はコンソールに出力され、キーに対応する値の有無に応じて適切なメッセージが表示されます。

Keyが存在しない場合はdefault valueが返る

C#のTryGetValueメソッドは、指定されたキーがDictionary内に存在しない場合に特に優れた挙動を示します。

このメソッドを使用すると、キーが見つからない場合には自動的にその型のデフォルト値が返されるのです。
数値型の場合、デフォルト値は0、参照型の場合はnullになります。

この挙動のおかげで、キーの存在を事前に確認せずとも安全に値を取り出すことが可能になり、コードの冗長性を減らすことができます。

次に、具体的なサンプルコードを通じて、このデフォルト値の取り扱いについて詳しく見ていきましょう。


var phoneBook = new Dictionary
{
	{ "山田太郎", "090-1234-5678" },
	{ "田中花子", "080-9876-5432" }
};

// キーが存在しない場合のデフォルト値を確認
if (!phoneBook.TryGetValue("鈴木一郎", out var number))
{
	Console.WriteLine($"鈴木一郎の電話番号は見つかりませんでした。デフォルト値は'{number}'です。");
	// 'number' は null (stringのデフォルト値)
}

この例では、phoneBookというDictionaryに「山田太郎」と「田中花子」の電話番号が登録されていますが、「鈴木一郎」の電話番号は登録されていません。
TryGetValueメソッドを使って「鈴木一郎」の電話番号を検索すると、キーが存在しないため、outパラメータのnumberにはstring型のデフォルト値であるnullが格納されます。
結果として、コンソールには「鈴木一郎の電話番号は見つかりませんでした。デフォルト値は”です。」と表示されます。

このようにTryGetValueメソッドを使うと、キーの存在チェックとデフォルト値の取得を同時に行うことができるため、コードがシンプルで読みやすくなります。

各型のデフォルト値は以下の公式ドキュメントを参照してください。

TryGetValueメソッドの中身

TryGetValueメソッドがキーが存在しない場合にデフォルト値を返す理由を、公式のソースコードを参照して解説します。


public bool TryGetValue(TKey key, out TValue value) {
	int i = FindEntry(key);
	if (i >= 0) {
		value = entries[i].value;
		return true;
	}
	value = default(TValue);
	return false;
}

このメソッドは、指定されたキーがDictionary内のentries配列に存在するかをチェックします。
これはFindEntryメソッドを使って行われ、キーが見つかるとそのインデックスを返します。

キーが見つかった場合 (i >= 0)

この条件が真の場合、メソッドは指定されたキーに対応する値をvalueに設定し、trueを返します。
これはキーが存在し、正常に値が取得できたことを意味します。

キーが見つからなかった場合 (i < 0)

この場合、valuedefault(TValue)を設定し、falseを返します。
ここが重要で、default(TValue)TValue型のデフォルト値を意味します。
たとえば、TValueが数値型の場合、そのデフォルト値は0になります。
参照型の場合はnullになります。

この動作により、TryGetValueはキーが見つからない場合に、型のデフォルト値を返すようになっています。
この挙動は、キーの存在確認と値の取得を同時に行いつつ、キーが存在しない場合にエラーを発生させることなく安全に処理を進めることを可能にしています。
これが、TryGetValueメソッドがデフォルト値を返す理由です。

まとめ

本記事では、C#の重要な機能の一つであるTryGetValueメソッドについて詳しく見てきました。
このメソッドは、Dictionary型コレクションでキーに対応する値を取得する際に、非常に有効な方法を提供します。
キーが存在する場合は、関連する値を取得し、存在しない場合は型のデフォルト値を返す安全な構造が特徴です。

TryGetValueの使用は、プログラムの安全性を高めるだけでなく、コードの簡潔さと効率性も向上させます。
キーの存在チェックと値の取得を一度の操作で行えるため、冗長なコードやエラーハンドリングを減らすことができます。

特に、キーが見つからない場合にデフォルト値を返す機能は、エラーを避けながらも必要な情報を適切に処理する上で非常に有用です。
サンプルコードを通じて、このメソッドの基本的な使い方とその効果を理解することができました。

C#プログラミングにおいてTryGetValueメソッドの適切な使用は、より安全で効率的なコードに繋がります。
今後の開発において、このメソッドの使い方を活かしていただければと思います。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です