# 物件比對 ###### tags: `C#` **一、What:** 對比兩個相同Type的物件是否相同,在程式語言中"相同"可由不同面相來定義。例如: Reference/屬性值/自定義的條件...等。 **二、Why:** 實務上滿常運用到因此筆記起來。 **三、How:** C#的物件類別(Object)所提供的等於運算子("==") & virtual function Equalis()來完成物件的比對。 >C#變數型態分兩種: >1. Value Type (int/doubel/long/Char...) >2. Reference Type (object/Class/String) ### "==" 比對原理 1. 比對**Value Type** C#使用"=="運算子比對Value Type(eg, int/double/long/char...)會自動轉型。 ``` 1==1 1==1.0 1==1L '1'==49 以上皆為True ``` 2. 比對**Reference Type** 比對是否皆指向相同物件位置(參考) 相當於`Object.ReferenceEquals()` 3. 比對**String** 直接比較String內容。注意: ``` String不是C#內建Value Type而是Reference Type 1="1" —>compilation error ``` ### "Equals"比對原理 1. 比對**Value Type** Type不一致皆為False 2. 比對**Reference Type** 一樣是比對是否皆指向相同物件位置(參考) = `Object.ReferenceEquals()` 3. 比對**String** 直接比較String內容。 `1.Equals("1") —>合法回False (int not equals string)` --- ### 參考資料 [Equality in C#](https://www.notion.so/2457a33b29334d9abd0ee01a4832781c#dc53339b1b76464fa61fb20d434fbf88)