---
# System prepended metadata

title: 物件比對
tags: [C#]

---

# 物件比對
###### 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)