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

== vs Equals() ใน C#: ความแตกต่างการเปรียบเทียบ

ใน C# มี 2 วิธีเปรียบเทียบค่า: Equality Operator (==) และ Equals() Method พฤติกรรมต่างกันไปตามประเภท (Reference Type vs Value Type)

Reference Types (Class, String, Array, Delegate)

  • ==: เปรียบเทียบ Reference Identity (ชี้ Object เดียวกันหรือไม่) - ยกเว้น String ที่ Overload ไว้
  • Equals(): เปรียบเทียบ Value/Content (ถ้า Override ไว้)

Value Types (Struct, int, DateTime, Enum)

  • == และ Equals() ทั้งคู่เปรียบเทียบ Value

ตัวอย่าง: String (Reference Type แต่ Overload ==)

string s1 = "hello";
string s2 = "hello";
Console.WriteLine(s1 == s2);       // True (Value - String Overload ==)
Console.WriteLine(s1.Equals(s2));  // True (Value)

object o1 = "hello";
object o2 = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
Console.WriteLine(o1 == o2);       // False (Reference - ตัวแปรต่างกัน)
Console.WriteLine(o1.Equals(o2));  // True (Value - String.Equals Override)

ผลลัพธ์

True
True
False
True

สรุปพฤติกรรม

ประเภท== (Operator)Equals()
Value Type (int, struct)Value ComparisonValue Comparison
Reference Type (class)Reference ComparisonReference Comparison (Default)
StringValue Comparison (Overload)Value Comparison (Override)
DelegateReference ComparisonReference Comparison

แนวทางปฏิบัติที่ดี

  • ใช้ Object.Equals(a, b) (Static) - ปลอดภัยกับ Null ทั้งคู่
  • Override Equals() และ GetHashCode() คู่กันสำหรับ Custom Types
  • Implement IEquatable<T> สำหรับ Value Types
  • ใช้ StringComparison Enum สำหรับ String Comparison ที่ชัดเจน
// Safe Null Handling
bool areEqual = Object.Equals(obj1, obj2); // True if both null

// String Comparison Best Practice
bool equals = string.Equals(s1, s2, StringComparison.OrdinalIgnoreCase);