記事詳細


投稿日
2026年11月14日21時05分
タイトル

C#: 2 ”if (!paymentTypesByName.TryGetValue(seed.PaymentTypeName, out var paymentTypeId)) ” このコードを解説、前回よりもさらに具体的に・実務的な視点で解説し、動作確認できるコード例も改良版で提示します

内容

1. paymentTypesByName の想定

  • これは Dictionary<TKey, TValue> 型のコレクションで、キーが支払い方法名 (string)、値が支払い方法ID (int) などの構造を持つと考えられます。
  • 例:
Csharp
Dictionary<string, int> paymentTypesByName = new Dictionary<string, int>();

2. TryGetValue の役割

  • TryGetValue(key, out value) は辞書からキーに対応する値を安全に取得するためのメソッド。
  • 戻り値は boolで、
    • true → キーが存在し、値が value に格納される
    • false → キーが存在しない(value は型の既定値になる)

3. out var paymentTypeId

  • out は呼び出し先から値を受け取るための修飾子。
  • var を使うことで型推論が行われ、辞書の値の型に自動的に合わせられます。
  • C# 7.0 以降では out var によって変数宣言と値受け取りを同時に行えるため、コードが簡潔になります。

4. ! 演算子

  • ! は論理否定(NOT)。
  • TryGetValue(...) が false の場合に ! が true になります。

5. 全体の意味

この if 文はこういう意味になります:

「seed.PaymentTypeName というキーが paymentTypesByName に存在しない場合、if の中の処理を実行する」

6. 改良版サンプルコード

以下は存在する場合と存在しない場合をテストし、さらに入力検証も追加した例です。

Csharp
using System; using System.Collections.Generic; class Program { static void Main() { // 支払い方法名とIDの辞書 var paymentTypesByName = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase) { { "CreditCard", 1 }, { "Cash", 2 }, { "BankTransfer", 3 } }; // テスト用データ var seeds = new[] { new { PaymentTypeName = "Cash" }, new { PaymentTypeName = "PayPal" } }; foreach (var seed in seeds) { // 入力検証 if (string.IsNullOrWhiteSpace(seed.PaymentTypeName)) { Console.WriteLine("支払い方法名が空です。"); continue; } // TryGetValueで安全に取得 if (!paymentTypesByName.TryGetValue(seed.PaymentTypeName, out var paymentTypeId)) { Console.WriteLine($"支払い方法 '{seed.PaymentTypeName}' は登録されていません。"); } else { Console.WriteLine($"支払い方法 '{seed.PaymentTypeName}' のIDは {paymentTypeId} です。"); } } } }

実行結果例

支払い方法 'Cash' のIDは 2 です。 支払い方法 'PayPal' は登録されていません。

改良ポイント

  1. StringComparer.OrdinalIgnoreCase を使ってキー比較を大文字小文字を区別せずに行う。
  2. 入力検証 (string.IsNullOrWhiteSpace) を追加して空文字や null を防止。
  3. 複数テストケースをループで処理し、実務的な動作確認が可能。

この改良版なら、実務コードでもそのまま使える安全性と可読性を備えています。
次は TryGetValue の内部動作やパフォーマンス面も解説できますが、それも追加しますか?

Powered by Froala Editor

添付画像

画像はありません
Genreのカテゴリ-名
Contexts
編集 | 記事一覧