ディクショナリ から例外を発生させずに値を取得するには TryGetValue メソッドを使用するか、ContainsKey メソッドでキー値の存在確認を行います。
エラーの発生する例
using System.Collections.Generic;
// 辞書の定義
var dict = new Dictionary<string, string>();
// 辞書にないキーを指定
var value = dict["101"];
- 7行目: "101" が Dictionary に存在しないため、例外「KeyNotFoundException」 が発生します。

対処方法1 TryGetValue メソッドを使用
TryGetValue メソッドにキー値と変数を渡すと、キー値に対応する値が変数に格納されます。キー値が見つからない場合は何もしません。TryGetValue の使用方法
取得結果(true or false) = 辞書オブジェクト.TryGetValue(対象のキー値, out 受け取り用変数)
- 取得に成功すると true、失敗すると false を返します。
- 取得に成功したとき、引数に指定した「受け取り用変数」に値が入ります。
- 取得に失敗したとき、引数に指定した「受け取り用変数」の値は変わりません。
using System.Collections.Generic;
// 辞書の定義
var dict = new Dictionary<string, string>();
// TryGetValue で使用する変数の定義
string dictValue;
// 辞書にないキーを指定
if (dict.TryGetValue(key: "101", value: out dictValue) == true)
{
System.Console.WriteLine(dictValue);
}
else
{
System.Console.WriteLine("ありません");
}
- 7行目: この変数にキー値に対応する値が代入されます。
- 10行目: TryGetValue で値を取得しています。
- 16行目: この例では辞書内に対応する値が無いため、"ありません" が出力されます。
対処方法2 ContainsKey メソッドで キー値があるか確認
ContainsKey メソッドにキー値を渡すと、 対象のキーが存在する場合は true, 存在しない場合は false を返します。ContainsKey の使用方法
結果(true: あり false: なし) = 辞書オブジェクト.ContainsKey(キー値)
サンプルコード
using System.Collections.Generic;
// 辞書の定義
var dict = new Dictionary<string, string>();
// ContainsKey で、キー値が登録されているか確認
if (dict.ContainsKey(key: "101") == true)
{
System.Console.WriteLine(dict["101"]);
}
else
{
System.Console.WriteLine("ありません");
}
- 7行目: ContainsKey メソッドで "101" が dict に存在するか確認しています。
- 13行目: この例では "101" が dict に存在しないため、else区の "ありません" が出力されます。
検証環境
- .NET 5.0
- Microsoft Visual Studio Professional 2019 Version 16.9.3
- Microsoft Windows 10 Pro Version 20H2 OS Build 19042.870 Experience: Windows Feature Experience Pack 120.2212.551.0