[英]== vs Equals in C#
在C#中評估==和Equals有什么區別?
對於Ex,
if(x==x++)//Always returns true
但
if(x.Equals(x++))//Always returns false
編輯:
int x=0;
int y=0;
if(x.Equals(y++))// Returns True
根據規范,這是預期的行為。
第一部分的行為受規范第7.3節的約束:
表達式中的操作數從左到右進行計算。 例如,在
F(i) + G(i++) * H(i)
,使用舊值i調用方法F,然后使用舊值i調用方法G,最后調用方法H與i的新價值。 這與運算符優先級分開並且與運算符優先級無關。
因此,在x==x++
,首先評估左操作數( 0
),然后評估右手( 0
, x
變為1
),然后進行比較: 0 == 0
為真。
第二部分的行為受第7.5.5節的約束:
- 如果M是在value-type中聲明的實例函數成員:
- E被評估。 如果此評估導致異常,則不執行進一步的步驟。
- 如果E未被歸類為變量,則創建E類型的臨時局部變量,並將E的值分配給該變量。 然后將E重新分類為對該臨時局部變量的引用。 臨時變量在M中可以訪問,但不能以任何其他方式訪問。 因此,只有當E是真變量時,呼叫者才有可能觀察到M對此做出的變化。
- 參數列表按照§7.5.1中的描述進行評估。
- M被調用。 E引用的變量成為由此引用的變量。
請注意, 值類型通過引用傳遞給它們自己的方法。
因此,在x.Equals(x++)
,首先計算目標(E是x
,變量),然后計算參數( 0
, x
變為1
),然后進行比較: x.Equals(0)
為false 。
編輯:我也想贊揚dtb現在收回的評論,在問題結束時發布。 我認為他說的是同樣的事情,但由於評論的長度限制,他無法完全表達。
評估順序。 ++首先評估(第二個例子)。 但在第一個例子中,==首先執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.