由object不能比較引發的問題

2021-05-23 08:49:21 字數 1435 閱讀 6870

這是乙個小問題,請看下面的**

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace sample}}

我們假設有兩個變數,其實它們是int,但程式用object來接收它們。然後我們需要對它們進行比較
很抱歉,上面**不能執行,甚至它都不能編譯

為什麼會報告這個錯誤呢?這是因為object這個基礎型別並沒有實現類似於icomparable之類的介面,也就是說它們的值本身是無法比較的。
那麼這又是為什麼呢?因為object其實是引用型別,同時又因為任何資料都可以用object表示,所以其他它不可能知道到底怎麼比較不同object直接的值的
例如,你可能會那乙個int的數值(5)去跟乙個employee的數值(例如某個例項)比較,大家想想它怎麼可能知道應該怎麼比較呢?
ok,那麼如何解決我們上面的問題呢,假設我們希望兩個object可以比較,有何方法呢?
其實是有可能實現的,我們再來看下面的**
using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace sample}}

這樣我們就實現了比較了,我們分別對兩個object去獲取hashcode,這個方法返回的是int,既然是int當然就可以比較了。

那麼,也就是說其實任何型別都可以通過實現gethashcode方法,來提供這個支援

class employee 

}

那麼,如果不重寫這個方法,預設的hashcode是多少呢?猜猜看吧

答案是:這是乙個隨機的int數值。

最後,我們可以考慮為object實現乙個擴充套件方法,讓它可以」比較」

public

static

class objectextensions

}

然後就可以使用下面這樣的方式去比較

console.writeline(a.compareto(b));

由 引發的思考

前陣子在乙個移動專案中,通過 的方式 繫結click 事件來提交乙個表單,由於表單資訊比較敏感,於是採用的post 同步提交的方式,原本到也沒有什麼。後來萬惡的pm說 你這個按鈕呀,要固定在底部比較好 於是乎就通過 position fixed 固定到底部了。那麼,問題來了 在ios 下,虛擬鍵盤是...

由lib引發的血案 opencv找不函式問題

在使用opencv中的函式時,連續兩次遇到函式找不到的問題,第一次查時按照他人說的包含進乙個標頭檔案後,果真還真解決了 然而第二次在呼叫cvinpaint函式時包含進對應標頭檔案,編譯通過但執行不成功還是未定義識別符號。在網上搜了之後才真正理解了原因,某個函式找不到主要是由於debug和releas...

Object 類的比較

object 所有類的父類。所有物件都具備的內容不斷地抽取,就到了乙個頂層object類中。public class person public void setages int ages person int ages 既然父類中已經提供了對對像相等的比較,可以直接使用,如果比較內容不是所需要,可...