06判等物件是否相等

2021-09-07 22:34:34 字數 2371 閱讀 2730

判斷相等的3個方法

例項方法

public

virtual

bool equals(object obj)

比較值型別靜態方法

public

static

bool equals(object obja, object objb)

比較引用型別靜態方法

public

static

bool referenceequals(object obja, object objb)

判斷引用型別是否相等

class program
}
public

class team

}
public

struct teamstruct

}
結果:

false

false

判斷值型別是否相等

□ 值型別判斷方法

派生於system.valuetype,對system.object中的虛方法equals(object obj)進行了重寫

public

override

bool equals(object obj)

runtimetype type = (runtimetype) base.gettype();
runtimetype type2 = (runtimetype) obj.gettype();
if (type2 != type) //比較兩個物件是否是同一型別
object a = this;
if (cancomparebits(this)) //物件成員如果存在對於堆的引用返回false
//反射獲取值型別的所有字段
fieldinfo fields = type.getfields(bindingflags.nonpublic | bindingflags.public | bindingflags.instance);
for (int i = 0; i < fields.length; i++) //遍歷字段,對各個字段進行比較
}
else

if (!obj3.equals(obj4))

}
return

true;

}
□ 用==判斷是否相等

static

void main(string args)

出現編譯錯誤。原因是值型別不能用==進行判斷。

□ 用equals()例項方法判斷是否相等

static

void main(string args)

返回true。可見,如果值型別的字段相等,那就相等。

static

void main(string args)

返回false,當然,值型別的字段有不相等,就會整個不相等。   

判斷複雜值型別是否相等

即值型別中包含引用型別和值型別。

class program
}
public

class team

}
public

struct teamstruct

}
public

struct nationalteam

}
返回true,會遍歷比較引用型別成員和值型別成員。在nt1和nt2中,型別為team的引用型別成員_team指向同乙個物件例項,  型別為teamstruct的值型別成員_structteam相等,所有整個返回。如圖:

參考資料

※ 《.net之美》--張子陽,感謝寫了這麼好的書!

C 判等物件是否相等的方法彙總

一 判斷相等的3個方法 1.例項方法 public virtual bool equals object obj 2.比較值型別靜態方法 public static bool equals object obja,object objb 3.比較引用型別靜態方法 pub static bool re...

比較兩個物件是否相等

using system using system.collections.generic using system.text using system.reflection namespace objectcompare public int age static class program 測試...

Set 判斷倆個物件是否相等

set判斷倆個物件相同不是使用 運算子,而是根據equals方法。也就是說,如果只要倆個物件用equals方法比較返回true,set就不會接受這個物件,反之,只要來個物件用equals方法返回false,set就會接受這個物件 甚至這倆個物件是同乙個物件,set也可以把他們當成倆個物件 hashs...