C# - 辞書(Dictionary)にない値を取得しようとすると 例外「KeyNotFoundException」が発生する

ディクショナリ から例外を発生させずに値を取得するには TryGetValue メソッドを使用するか、ContainsKey メソッドでキー値の存在確認を行います。

エラーの発生する例

using System.Collections.Generic;

// 辞書の定義
var dict = new Dictionary<string, string>();

// 辞書にないキーを指定
var value = dict["101"];
KeyNotFoundException

対処方法1 TryGetValue メソッドを使用

TryGetValue メソッドにキー値と変数を渡すと、キー値に対応する値が変数に格納されます。キー値が見つからない場合は何もしません。

TryGetValue の使用方法

取得結果(true or false) = 辞書オブジェクト.TryGetValue(対象のキー値, out 受け取り用変数)
サンプルコード
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("ありません");
}

対処方法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("ありません");
}

検証環境

関連ページ