C# の Dictionary<TKey, TValue>
はキーと値を効率的に管理できる便利なコレクションですが、存在しないキーを参照すると例外が発生する点に注意が必要です。安全に操作するためには TryGetValue
や GetValueOrDefault
を活用するのが効果的です。本記事ではそれぞれの使い方を解説します。
Dictionaryでの例外
存在しないキーにアクセスすると KeyNotFoundException
が発生します。
var dict = new Dictionary<string, int>
{
["A"] = 1,
["B"] = 2
};
Console.WriteLine(dict["A"]); // 1
Console.WriteLine(dict["C"]); // KeyNotFoundException
この問題を避けるために、まずキーが存在するかを確認する必要があります。
TryGetValueで安全に取得
TryGetValue
はキーが存在するかを確認しつつ、安全に値を取得できます。
if (dict.TryGetValue("C", out int value))
{
Console.WriteLine($"値: {value}");
}
else
{
Console.WriteLine("キーが存在しません");
}
これにより、例外を回避しつつ処理を分岐できます。
GetValueOrDefaultで簡潔に取得
C# 7.0 以降では GetValueOrDefault
メソッドが追加され、キーが存在しない場合はデフォルト値を返すようになりました。
int value1 = dict.GetValueOrDefault("A"); // 1
int value2 = dict.GetValueOrDefault("C"); // 0(int のデフォルト値)
Console.WriteLine(value1); // 1
Console.WriteLine(value2); // 0
ジェネリック型のデフォルト値(int
なら 0
、string
なら null
)が返されます。
デフォルト値を指定する
.NET Core 3.0 以降では、任意のデフォルト値を指定するオーバーロードも利用可能です。
int value3 = dict.GetValueOrDefault("C", -1); // -1 を返す
Console.WriteLine(value3); // -1
まとめ
Dictionary
を安全に操作するには、次の方法を使い分けるのが効果的です。
TryGetValue
… キーの有無を判定しつつ安全に取得GetValueOrDefault
… キーが存在しない場合はデフォルト値を返す- カスタムデフォルト値を指定して柔軟に利用可能(.NET Core 3.0 以降)
キーが存在しない可能性がある場合には、これらのメソッドを活用して例外を回避しましょう。