add IEquatable<T> implement
update