public class Address{ public string ContactName {get; private set;} public string Company {get; private set;} //... public string Zip {get; private set;} }
Я хотел бы внедрить понятие различных адресов, поэтому я переопределил Equals ()для проверки регистра -нечувствительного равенства во всех полях (, поскольку это адреса США, я использовал Ordinal вместо InvariantCulture для максимального производительность):
public override bool Equals(Object obj){ if (obj == null || this.GetType() != obj.GetType()) return false; Address o = (Address)obj; return (string.Compare(this.ContactName, o.ContactName, StringComparison.OrdinalIgnoreCase) == 0) && (string.Compare(this.Company, o.Company, StringComparison.OrdinalIgnoreCase) == 0) //... (string.Compare(this.Zip, o.Zip, StringComparison.OrdinalIgnoreCase) == 0) }
Я хотел бы написать GetHashCode ()так же, как (игнорировать неэффективность конкатенации на данный момент):
public override int GetHashCode(){ return (this.contactName + this.address1 + this.zip).ToLowerOrdinal().GetHashCode(); }
но этого не существует.Что я должен использовать вместо этого? Или я должен просто использовать InvariantCulture в моем методе Equals ()?
(Я думаю
.ToLowerInvariant().GetHashCode()
, но я не уверен на 100%, что InvariantCulture не может решить, что идентичный символ (, такой как ударение ), имеет другое значение в другом контексте.)