2012-03-04 39 views
1

當Int32沒有實現相等運算符時,這是如何工作的?結構相等如何與Int32一起使用?

bool y = 6 == 5; 
+0

好的,當我知道答案時,我問了一個主要問題。我真的應該問具體問題。所以這裏是它http://stackoverflow.com/questions/9552760/how-to-detect-if-a-type-supports-equaility-with-no-operator – Simon 2012-03-04 06:11:14

回答

6

基本數字類型的==運算符是語言規範的一部分,而不是框架類型。它編譯成專用的IL指令(ceq),而不是方法調用。

對於所有其他基本運算符(包括算術運算,比較運算和轉換運算)也是如此。

+0

謝謝。給一個類型如何檢測一個類型是否支持ceq? – Simon 2012-03-04 06:02:08

+0

@Simon:你不會的。這是一種語言級別的功能。你想做什麼? – SLaks 2012-03-04 06:04:26

2

當Int32沒有實現相等運算符時,這是如何工作的?

對不起,我覺得你有缺陷的前提是出:-)從docs

的的Int32類型支持標準的數學運算,如加法,減法,除法,乘法,減法,否定,和一元否定。與其他整型類型一樣,Int32類型也支持按位AND,OR,XOR,左移和右移運算符。

您可以使用標準數字運算符來比較兩個Int32值或者您可以調用CompareTo或Equals方法。

0

只是爲了添加到SLaks的答案,比較int32是經常這麼多的類,這將是一個巨大的性能問題,而不是以自定義的方式實現這一點。這個專用的IL指令實際上會編譯成一個非常快速的機器指令來執行這個操作。

它與java不得不使用它的原始類型相同。使用面嚮對象語言時,您始終存在「純度」的問題,您沒有int32,您有一個「整數」對象,或者您允許原始類型,接受複雜性並從它們可以添加的速度中受益。

相關問題