public override int GetHashCode() { unchecked { var hashCode = (MessageType != null ? MessageType.GetHashCode() : 0); hashCode = (hashCode * 397) ^ CommunicationType.GetHashCode(); hashCode = (hashCode * 397) ^ RouteType.GetHashCode(); hashCode = (hashCode * 397) ^ (int)Priority; hashCode = (hashCode * 397) ^ Exclusive.GetHashCode(); hashCode = (hashCode * 397) ^ (LocalContext != null ? LocalContext.GetHashCode() : 0); hashCode = (hashCode * 397) ^ (RemoteBoundedContext != null ? RemoteBoundedContext.GetHashCode() : 0); hashCode = m_Hints.Keys.OrderBy(k => k).Aggregate(hashCode, (h, key) => (h * 397) ^ key.GetHashCode()); hashCode = m_Hints.Values.OrderBy(v => v).Aggregate(hashCode, (h, value) => (h * 397) ^ (value != null?value.GetHashCode():0)); return(hashCode); } }