C#において頻繁に使用されるコレクションの一つに、Dictionary
があります。これは、キーと値のペアを管理するデータ構造であり、例えばユーザー名とスコアのように、何かを「対応づけて保存」したい場面で非常に役立ちます。
しかし、Dictionary
を使う際に注意しなければならない点があります。それは「存在しないキーにアクセスしようとすると例外が発生する」ということです。初心者の方がつまずきやすいポイントでもありますね。
本記事では、C#の Dictionary
において、特定のキーが存在するかどうかを安全に確認する方法について、基本から丁寧に解説してまいります。「ContainsKey」と「TryGetValue」という2つの主要なメソッドの使い方を中心に、実用的なサンプルも交えながらご紹介いたします。
それでは、一緒に確実で安全なDictionary操作の第一歩を踏み出していきましょう。
Dictionaryの基本的な使い方は、こちらで紹介をしております。ぜひご覧ください。
存在チェックの方法1:ContainsKeyメソッド
最も基本的な方法は、ContainsKey
メソッドを使うことです。
これは、指定したキーが Dictionary
に存在するかどうかを bool
値で返してくれるシンプルなメソッドです。
if (scores.ContainsKey("Alice"))
{
Console.WriteLine("Aliceのスコアは存在します。");
}
このように事前に存在を確認しておけば、安心して値を取り出すことができます。
特に、入力されたキーが事前に分からない場面(例:ユーザー入力)では、必ず ContainsKey
でチェックする習慣をつけておきたいところです。
存在チェックの方法2:TryGetValueメソッド
もう一つの便利な方法が、TryGetValue
を使うことです。
このメソッドは「キーが存在するか確認しつつ、値の取得まで一度に行う」ことができるという優れモノです。
if (scores.TryGetValue("Bob", out int score))
{
Console.WriteLine($"Bobのスコアは {score} 点です。");
}
else
{
Console.WriteLine("Bobのスコアは見つかりませんでした。");
}
ご覧のとおり、TryGetValue
を使うことで、存在確認と値の取り出しが一体化され、コードがすっきりとします。ContainsKey
→ 取得 という2段階よりも効率的ですので、「値も必要」な場合はこちらを積極的に使ってみましょう。
存在チェックの注意点
大文字・小文字の違いに注意
Dictionary<string, T>
では、デフォルトではキーの比較は「大文字・小文字を区別」します。
var dict = new Dictionary<string, string>();
dict["Apple"] = "果物";
Console.WriteLine(dict.ContainsKey("apple")); // false(大文字・小文字が違うため)
もし大文字・小文字を無視したい場合は、StringComparer.OrdinalIgnoreCase
を使いましょう。
var dict = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
存在しないキーにアクセスすると例外になる
何度でも強調しておきたいのですが、存在しないキーを dict[key]
で直接アクセスすると例外(KeyNotFoundException
)が発生します。
開発中にクラッシュしないよう、必ず存在チェックを行うように心がけましょう。
まとめ
Dictionary
を使う際には、キーの存在チェックが不可欠です。- 単に存在を確認したい場合は
ContainsKey
を、値も一緒に欲しい場合はTryGetValue
を使いましょう。 - 大文字・小文字の違いや例外には十分注意。
C#の Dictionary
を安全に、そして快適に使いこなすために、今回ご紹介した内容をぜひ活用してみてください!
コメント