判斷相等的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
}
publicclass team
}
publicstruct teamstruct
}結果:
false
false
判斷值型別是否相等
□ 值型別判斷方法
派生於system.valuetype,對system.object中的虛方法equals(object obj)進行了重寫
publicoverride
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++) //遍歷字段,對各個字段進行比較
}
elseif (!obj3.equals(obj4))
}
returntrue;
}□ 用==判斷是否相等
static出現編譯錯誤。原因是值型別不能用==進行判斷。void main(string args)
□ 用equals()例項方法判斷是否相等
static返回true。可見,如果值型別的字段相等,那就相等。void main(string args)
static返回false,當然,值型別的字段有不相等,就會整個不相等。void main(string args)
判斷複雜值型別是否相等
即值型別中包含引用型別和值型別。
class program
}
publicclass team
}
publicstruct teamstruct
}
publicstruct 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...