簡體   English   中英

== vs C等於#

[英]== 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 ),然后評估右手( 0x變為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 ,變量),然后計算參數( 0x變為1 ),然后進行比較: x.Equals(0)為false 。

編輯:我也想贊揚dtb現在收回的評論,在問題結束時發布。 我認為他說的是同樣的事情,但由於評論的長度限制,他無法完全表達。

評估順序。 ++首先評估(第二個例子)。 但在第一個例子中,==首先執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM