需求:一個 Key 對應多個 Value(如:用戶 ID → 多個訂單 ID),但 Dictionary<TKey, TValue> 強制 Key 唯一。
var dict = new Dictionary<int, List<string>>();
dict.Add(1, new List<string> { "OrderA", "OrderB" });
dict[1].Add("OrderC"); // 追加
// 遍歷
foreach (var kvp in dict) {
Console.WriteLine($"User {kvp.Key}: {string.Join(",", kvp.Value)}");
}
適用於:頻繁增刪 Value、需按 Key 快速查找所有 Value。
var pairs = new List<KeyValuePair<int, string>>();
pairs.Add(new KeyValuePair<int, string>(1, "OrderA"));
pairs.Add(new KeyValuePair<int, string>(1, "OrderB"));
// LINQ 分組查詢
var userOrders = pairs.Where(p => p.Key == 1).Select(p => p.Value);
適用於:數據量小、主要順序遍歷、需保留插入順序、或需序列化為簡單數組。
var lookup = pairs.ToLookup(kvp => kvp.Key, kvp => kvp.Value);
// lookup[1] → IEnumerable<string>,無 KeyNotFoundException,語義純粹
選型建議:寫多讀少 → Dictionary<List>;讀多寫少/一次性構建 → ILookup;簡單序列化傳輸 → List<KeyValuePair>。