【C#】Dictionaryを安全に操作する方法|TryGetValueとGetValueOrDefault

C# の Dictionary<TKey, TValue> はキーと値を効率的に管理できる便利なコレクションですが、存在しないキーを参照すると例外が発生する点に注意が必要です。安全に操作するためには TryGetValueGetValueOrDefault を活用するのが効果的です。本記事ではそれぞれの使い方を解説します。

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 なら 0string なら null)が返されます。

デフォルト値を指定する

.NET Core 3.0 以降では、任意のデフォルト値を指定するオーバーロードも利用可能です。

int value3 = dict.GetValueOrDefault("C", -1); // -1 を返す
Console.WriteLine(value3); // -1

まとめ

Dictionary を安全に操作するには、次の方法を使い分けるのが効果的です。

  • TryGetValue … キーの有無を判定しつつ安全に取得
  • GetValueOrDefault … キーが存在しない場合はデフォルト値を返す
  • カスタムデフォルト値を指定して柔軟に利用可能(.NET Core 3.0 以降)

キーが存在しない可能性がある場合には、これらのメソッドを活用して例外を回避しましょう。