結構比較
陣列和元組都實現介面istructuralequatable
和istructuralcomparable.
這兩個介面不僅可以比較引用
,還可以比較內容
.這些介面都是顯示實現的
,所以在使用時需要把陣列和元組強制轉換為這個介面
.istructuralequatable
介面用於比較兩個元組或陣列是否有相同的內容
,istructuralcomparable
介面用於給元組或陣列排序.
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace 結構比較
class program
static void main(string args)
//建立兩個
person
項的陣列.
//比較運算子
!=返回
true
//因為這其實是兩個變數p1和
p2引用的兩個不同陣列.
//因為
array
類沒有重寫帶乙個引數的
equals()放大,
所以用"=="
運算子
//比較引用會得到相同的結構
,即這兩個變數不相同
person zhangsan = new person ;
person p1 =
public string firstname
public string lastname
public override string tostring()
return string.format(",", id, firstname, lastname); ;
public override bool equals(object obj)
if (obj == null)
throw new argumentnullexception("obj");
return equals(obj as person);
public override int gethashcode()
return id.gethashcode();
public bool equals(person other)
if (other == null)
throw new argumentnullexception("other");
return this.id == other.id && this.firstname == other.firstname && this.lastname == other.lastname;
使用實現iequatable
介面的person
類.iequatable
介面定義了乙個強型別化的
equals()方法,
用來比較
firstname
和lastname
屬性的值.
下面看看如何對元組執行相同的操作.
這裡建立了兩個內容相同的元組例項:
var t1 = tuple.create("zhangsan", 19);
var t2 = tuple.create("zhangsan", 19);
//因為t1和
t2引用了兩個不同的物件
,所以比較運算子
"!="
返回true
if (t1 != t2)
console.writeline("not the same reference to the tuple");
//這會呼叫
object.equals()
方法比較元組的每一項
,每一項都返回
true
if (t1.equals(t2))
console.writeline("the same reference to the tuple");
tuple<>類提供了兩個
equals()方法:
乙個重寫了
object
基類中的
equals()方法,
並把object
作為引數
,第二個由
istructyralequalitycomparer
介面定義,並把
object
和iequalitycomparer
作為引數.
還可以使用類tuplecomparer
建立乙個自定義的
uequalitycomparer,
這個類實現了
iequalitycomparer
介面的兩個方法
equals()
和gethashcode():
public class tuplecomparer : iequalitycomparer
public bool equals(object x, object y)
return x.equals(y);
public int gethashcode(object obj)
return obj.gethashcode();
實現iequalitycomparer
介面的equals()
方法需要
new修飾符或者隱式實現的介面
,因為基類
object
也定義了帶兩個引數的靜態的
equals()方法.
使用tuplecomparer,
給tuple
類的equals()
方法傳遞乙個新例項
.tuple
類的equals(0
方法為要比較的每一項呼叫
tuplecomparer
的equals()方法.
所以,對於tuple類,
要呼叫兩次
tuplecomparer,
以檢查所有項是否相等
.
shell學習三十七天 引用
引用 案例,如果我想輸出乙個星號 使用echo 如何做?echo 這是肯定不行的,需要將 轉移,即 echo 這樣就引出了引用的概念.所為引用 是用來防止 shell 將某些你想要的東西解釋成不同的意義 如果你希望某些可能被 shell 視為個別引數的東西保持為單個引數 這時你就必須將其引用.引用的...
C 高階程式設計五十七天 位陣列
位陣列 假設須要處理非常多位,就能夠使用 bitarray 類和bitvector32.bitarray 位於命名空間 system.collections中.bitvector32位於命名空間 system.collections.speciallized.bitarray類 類bitarray ...
學習前端的第三十七天
js的物件的分類 本地物件 宿主物件 所有的自定義物件 注 例項化 轉化成實際的案例 補充關鍵字 delete,用來刪除自定義物件的屬性 只能刪除自定義物件的屬性,且一次只能刪乙個屬性 math數學物件,不需要數學知識支撐,使用這個物件直接得到想要的結果 方法 math.round math.cei...