一、判斷相等的3個方法
1.例項方法
public virtual bool equals(object obj)
2.比較值型別靜態方法
public static bool equals(object obja, object objb)
3.比較引用型別靜態方法
pub static bool referenceequals(object obja, object objb)
二、判斷引用型別是否相等
class program
}public class team
}public struct teamstruct
}執行結果:
false
false
分析:引用型別比較的是引用位址,由於t1和t2指向不同的物件例項,所以dou都返回false。
三、判斷值型別是否相等
1.值型別判斷方法
派生於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;
ijmwkevdxuyf (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;
}2.用==判斷是否相等
static void main(string args)
出現編譯錯誤。原因是值型別不能用==進行判斷。
3.用equals()例項方法判斷是否相等
static void main(string args)
返回true。
可見,如果值型別的字段相等,那就相等。
static void main(string args)
返回false,當然,值型別的字段有不相等,就會整個不相等。
4.判斷複雜值型別是否相等
即值型別中包含引用型別和值型別。
class program
}public class team
}public struct teamstruct
}public struct nationalteam
}返回true,會遍歷比較引用型別成員和值型別成員。在nt1和nt2中,型別為team的引用型別成員_team指向同乙個物件例項, 型別為teamstruct的值型別成員_structteam相等,所有整個返回。如下圖所示:
本文標題: c#判等物件是否相等的方法彙總
本文位址:
06判等物件是否相等
判斷相等的3個方法 例項方法 public virtual bool equals object obj 比較值型別靜態方法 public static bool equals object obja,object objb 比較引用型別靜態方法 public static bool referen...
C 判斷兩個物件是否相等
首先在c 中判斷物件相等,是對於引用型別的,兩個 物件用 只是判斷他們的記憶體位址是否一樣 對於字串或者數值,判斷相等只需要用 運算 引用型別 1.對乙個類只是例項化一次 向那些只有賦值沒有new例項化乙個物件的話,拿這些物件指的都是乙個位址 people p1 newpeople people p...
c 如何判斷兩個物件是否相等
在c 中判斷物件相等,這是對引用型別進行判斷,而不是對值型別,如果是對字串,或者是數值進行判斷相等只需要用 運算子就可以了。對兩個物件用 運算子,只能判斷他們兩個在記憶體中的位址是否一樣的。1.對乙個類只例項化一次 向那些賦值來賦值去的引用如果沒有new例項化乙個物件的話,那麼這些賦值來,賦值去的物...