C 高階程式設計三十七天 結構比較

2021-07-03 15:48:20 字數 3092 閱讀 8768

結構比較

陣列和元組都實現介面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...