บทความนี้สาธิตวิธีการตรวจสอบว่า StringDictionary สองตัวเท่ากันหรือไม่ โดยใช้ method Equals(object obj)
ตัวอย่างที่ 1: เปรียบเทียบ Dictionary 3 ตัว
using System;
using System.Collections.Specialized;
public class Demo
{
public static void Main()
{
StringDictionary strDict1 = new StringDictionary();
strDict1.Add("A", "John");
strDict1.Add("B", "Andy");
strDict1.Add("C", "Tim");
strDict1.Add("D", "Ryan");
strDict1.Add("E", "Kevin");
strDict1.Add("F", "Katie");
strDict1.Add("G", "Brad");
StringDictionary strDict2 = new StringDictionary();
strDict2.Add("A", "John");
strDict2.Add("B", "Andy");
strDict2.Add("C", "Tim");
strDict2.Add("D", "Ryan");
strDict2.Add("E", "Kevin");
strDict2.Add("F", "Katie");
strDict2.Add("G", "Brad");
StringDictionary strDict3 = new StringDictionary();
strDict3 = strDict2; // อ้างอิง object เดียวกัน
Console.WriteLine("Is Dictionary2 equal to Dictionary3? = " + strDict2.Equals(strDict3));
Console.WriteLine("Is Dictionary1 equal to Dictionary3? = " + strDict1.Equals(strDict3));
}
}
ผลลัพธ์
Is Dictionary2 equal to Dictionary3? = True Is Dictionary1 equal to Dictionary3? = False
ตัวอย่างที่ 2: เปรียบเทียบด้วยการวนลูปแสดงข้อมูล
using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo
{
public static void Main()
{
StringDictionary strDict1 = new StringDictionary();
strDict1.Add("A", "John");
strDict1.Add("B", "Andy");
strDict1.Add("C", "Tim");
strDict1.Add("D", "Ryan");
strDict1.Add("E", "Kevin");
strDict1.Add("F", "Katie");
strDict1.Add("G", "Brad");
Console.WriteLine("StringDictionary1 elements...");
foreach (DictionaryEntry d in strDict1)
{
Console.WriteLine(d.Key + " " + d.Value);
}
StringDictionary strDict2 = new StringDictionary();
strDict2.Add("A", "John");
strDict2.Add("B", "Andy");
strDict2.Add("C", "Tim");
strDict2.Add("D", "Ryan");
strDict2.Add("E", "Kevin");
strDict2.Add("F", "Katie");
strDict2.Add("G", "Brad");
Console.WriteLine("\nStringDictionary2 elements...");
foreach (DictionaryEntry d in strDict2)
{
Console.WriteLine(d.Key + " " + d.Value);
}
Console.WriteLine("\nIs Dictionary2 equal to Dictionary1? = " + strDict2.Equals(strDict1));
}
}
ผลลัพธ์
StringDictionary1 elements... A John B Andy C Tim D Ryan E Kevin F Katie G Brad StringDictionary2 elements... A John B Andy C Tim D Ryan E Kevin F Katie G Brad Is Dictionary2 equal to Dictionary1? = False
คำอธิบายเพิ่มเติม
Equals(object obj)ของ StringDictionary ตรวจสอบ reference equality (ชี้ไป object เดียวกัน)- strDict3 = strDict2 ทำให้ทั้งสองชี้ไป object เดียวกัน จึงได้ True
- strDict1 และ strDict2 เป็น object คนละตัว แม้ข้อมูลเหมือนกันทุกอย่างก็ได้ False
- StringDictionary ไม่มีการ override Equals สำหรับ value equality
- ถ้าต้องการเปรียบเทียบค่า ต้องเปรียบเทียบ Count, Keys, และ Values เอง หรือใช้ LINQ
- Key ไม่สนใจตัวพิมพ์ใหญ่เล็ก (case-insensitive) แต่ Equals ไม่ได้ใช้ logic นี้
- แนะนำใช้
Dictionary<string, string>ซึ่งยังเป็น reference equality เช่นกัน แต่มี API ทันสมัยกว่า