2012-08-23 32 views
-1

我只是渴望知道,爲什麼identity ===運算符在c#中不可用?是否有任何不可用的原因。 什麼是在c#中的===操作符的equalant? 因爲我在一個地方看到身份運算符===比== ==運算符更快。 因爲==運算符暫時改變數據類型。爲什麼identity ===運算符在c#中不可用?

更新:=====運營商之間的區別。 ===基本上不會將這兩個變量轉換爲臨時數據類型,而==等於暫時轉換轉換變量的數據類型

+0

它不存在,因爲要麼沒有人請求它,要麼沒有花時間去實現(或兩者)並不重要。你希望運營商做什麼? –

+0

我不明白爲什麼這個問題需要被投票... – MilkyWayJoe

+3

你不需要===因爲c#是嚴格鍵入的。這意味着你不打算比較兩種數據類型的變量,而無需先將它們轉換爲通用類型。 – zeal

回答

6

因爲ReferenceEquals存在。

因爲值類型會覆蓋相等性。

因爲C#不像JavaScript那樣沒有「truthy」和「falsy」值,隱式轉換已經很好的定義了。

簡而言之,它不存在,因爲它不像JavaScript那樣在C#中不需要。

+0

我想知道,有182k人回答了我,人們仍然給我投票 –

+4

@DNet網絡漫遊器 - 請解釋兩者之間的關係? – Oded

+0

@Oded'ReferenceEquals'不等同於'==='。 – Matthew

2

這是由於PHP/JavaScript是一種動態類型語言,而C-Sharp是靜態類型的。

例如(在PHP)

if (5 == '5') ... // is true 
if (5 === '5') ... // is false 

而在C#

if (5 == '5') ... // compile error, incompatible types 

編輯

要精心,很多的類型沒有隱式轉換(即字符串vs ints),這會導致編譯錯誤,但對於那些存在隱式轉換(ints vs float)的情況,執行類似類型的比較y你可以做。

float x = 1.0f; 
int y = 1; 

if (x == y) ... // is true 
if (x == y && x.GetType() == y.GetType()) ... // is false 
+0

「Weakly typed」!=「動態輸入」。不同類型的「==」實際上會導致弱類型語言的各種破壞。例如,在C中,您可能會將指針與數字進行比較。 – cHao

+0

@cHao你是對的,正在更新... – Matthew

相關問題