Какой самый чистый / лучший способ реализовать Equals и GetHashCode на сторонних типах, к которым у вас нет доступа? - PullRequest
1 голос
/ 03 ноября 2010

Проблема в том, что у вас есть сторонний тип, например, ClassA ниже.У меня нет доступа к коду, и он не реализует Equals и GetHashCode, поэтому мне нужно написать класс-оболочку, я думаю.Для элементов Equals и GetHashCode должны использоваться все закрытые поля-члены.

Какой лучший способ сделать это?Есть ли ярлык или шаблон, который я должен использовать?

Спасибо

public class ClassA
{
    public int FieldA {get; set;}
    public double FieldB { get; set; }
    public string FieldC { get; set; }
}

Ответы [ 4 ]

1 голос
/ 03 ноября 2010

Если вам нужно использовать ClassA в качестве ключа словаря, вы можете реализовать свой собственный класс, который реализует IEqualityComparer<ClassA>, и передать его конструктору словаря.Это позволяет вам переопределить методы типа GetHashCode и Equals.

0 голосов
/ 03 ноября 2010

Унаследуйте свой собственный класс от ClassA, а затем реализуйте в нем GetHashCode и Equals.

0 голосов
/ 03 ноября 2010

Как указано выше в Griver и Driis - наследуйте или объединяйте ClassA и реализуйте Equals на основе свойств a.

MSDN публикует некоторые рекомендации здесь

0 голосов
/ 03 ноября 2010

Я бы унаследовал от ClassA и переопределил Equals и GetHashCode.

Вам нужно будет основывать свою реализацию на общедоступных свойствах, поскольку у вас нет способа доступа к закрытым полям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...