i have c# class
public class entryclass { public string field { get; set; } public list<fieldkeyvaluepair<string, string>> fieldkeyvalpairs { get; set; } public bool equals(entryclass other) { return field.equals(other.field) && fieldkeyvalpairs.equals(other.fieldkeyvalpairs); } public override bool equals(object obj) { if (referenceequals(null, obj)) return false; if (referenceequals(this, obj)) return true; if (obj.gettype() != this.gettype()) return false; return equals((entryclass)obj); } } public class fieldkeyvaluepair<k, v> { public k key { get; set; } public v value { get; set; } public bool equals(fieldkeyvaluepair<k, v> other) { return key.equals(other.key) && value.equals(other.value); } public override bool equals(object obj) { if (referenceequals(null, obj)) return false; if (referenceequals(this, obj)) return true; if (obj.gettype() != this.gettype()) return false; return equals((fieldkeyvaluepair<k, v>)obj); } }
trying assert.istrue(expected.sequenceequal(actual));
gives me false, seeing when expected , actual has same fieldkeyvalpairs expression hits false && fieldkeyvalpairs.equals(other.fieldkeyvalpairs);
edit , expected , actual of type
list<entryclass> expected = new list<entryclass>(); // todo: list<entryclass> actual = new list<entryclass>();
may forgot override gethashcode(). comparison algorithm compares hash code first speed computation.
see answer more info: why important override gethashcode when equals method overridden?
Comments
Post a Comment