เมธอด ContainsKey() ของ Dictionary<TKey, TValue> ใช้ตรวจสอบว่าคีย์ที่ระบุมีอยู่ใน Dictionary หรือไม่ คืนค่า true หากมี false หากไม่มี ใช้เพื่อป้องกัน KeyNotFoundException เมื่อเข้าถึงคีย์ที่ไม่มีอยู่
รูปแบบการใช้งาน
Dictionary dict = new Dictionary();
bool exists = dict.ContainsKey("KeyName");
โค้ดตัวอย่างสมบูรณ์
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
var inventory = new Dictionary
{
{ "TV", 1 },
{ "Home Theatre", 2 },
{ "Amazon Alexa", 3 },
{ "Google Home", 5 },
{ "Laptop", 5 },
{ "Bluetooth Speaker", 6 }
};
Console.WriteLine("=== ตรวจสอบคีย์ด้วย ContainsKey ===");
CheckKey(inventory, "Laptop");
CheckKey(inventory, "Amazon Alexa");
CheckKey(inventory, "iPhone");
Console.WriteLine("\n=== ใช้ TryGetValue (แนะนำสำหรับดึงค่าพร้อมกัน) ===");
TryGetValue(inventory, "Laptop");
TryGetValue(inventory, "iPhone");
Console.WriteLine("\n=== นับจำนวนคีย์ที่มีอยู่ ===");
string[] keysToCheck = { "TV", "Laptop", "iPhone", "Mouse", "Keyboard" };
int found = keysToCheck.Count(k => inventory.ContainsKey(k));
Console.WriteLine($"พบ {found} จาก {keysToCheck.Length} คีย์");
}
static void CheckKey(Dictionary dict, string key)
{
if (dict.ContainsKey(key))
Console.WriteLine($"✓ '{key}' มีอยู่ - ค่า: {dict[key]}");
else
Console.WriteLine($"✗ '{key}' ไม่มีอยู่");
}
static void TryGetValue(Dictionary dict, string key)
{
if (dict.TryGetValue(key, out int value))
Console.WriteLine($"✓ '{key}' = {value}");
else
Console.WriteLine($"✗ '{key}' ไม่พบ");
}
}
ผลลัพธ์
=== ตรวจสอบคีย์ด้วย ContainsKey ===
✓ 'Laptop' มีอยู่ - ค่า: 5
✓ 'Amazon Alexa' มีอยู่ - ค่า: 3
✗ 'iPhone' ไม่มีอยู่
=== ใช้ TryGetValue (แนะนำสำหรับดึงค่าพร้อมกัน) ===
✓ 'Laptop' = 5
✗ 'iPhone' ไม่พบ
=== นับจำนวนคีย์ที่มีอยู่ ===
พบ 2 จาก 5 คีย์
ContainsKey vs TryGetValue - เลือกใช้อย่างไร?
| สถานการณ์ | เมธอดที่แนะนำ | เหตุผล |
|---|---|---|
| แค่ต้องการทราบว่ามีคีย์หรือไม่ | ContainsKey() | อ่านง่าย กำหนดเจตนาชัดเจน |
| ต้องการค่าพร้อมกับตรวจสอบ | TryGetValue() | ทำทั้งสองอย่างในครั้งเดียว (O(1) แค่ครั้งเดียว) |
| ต้องการค่าเริ่มต้นหากไม่มีคีย์ | GetValueOrDefault() | โค้ดสั้นที่สุด (C# 7+) |
ประสิทธิภาพ
ContainsKey(): O(1) เฉลี่ย - ใช้ Hash TableTryGetValue(): O(1) เฉลี่ย - ค้นหาและดึงค่าในขั้นตอนเดียว- หลีกเลี่ยงการใช้
dict[key]โดยตรง หากไม่แน่ใจว่าคีย์มีอยู่ (โยน Exception ค่าใช้จ่ายสูง)
การใช้งานกับ LINQ
var keysToCheck = new[] { "TV", "Laptop", "Phone" };
var existingKeys = keysToCheck.Where(k => inventory.ContainsKey(k));
var missingKeys = keysToCheck.Where(k => !inventory.ContainsKey(k));