Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

วิธีตรวจสอบว่า StringDictionary สองตัวเท่ากันหรือไม่ใน C#

บทความนี้สาธิตวิธีการตรวจสอบว่า 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 ทันสมัยกว่า