public int CompareTo(State <T> other) { if (ReferenceEquals(this, other)) { return(0); } if (ReferenceEquals(null, other)) { return(1); } var result = string.Compare(Id, other.Id, StringComparison.InvariantCulture); if (result == 0) { result = string.Compare(Type, other.Type, StringComparison.InvariantCulture); } if (result == 0) { result = TypeVersion.CompareTo(other.TypeVersion); } if (result == 0) { result = DataVersion.CompareTo(other.DataVersion); } if (result == 0) { result = Comparer <Metadata> .Default.Compare(Metadata, other.Metadata); } return(result); }