Всем доброго времени суток, что то я не могу додуплить переопределение метода Equals, суть следующая, есть класс: Code: public class Item { private string param1; private string param2; public Item(string p1, string p2) { this.param1 = p1; this.param2 = p2; } } Который хранит в себе некую информацию, а точнее параметр 1 и параметр 2. Так же имеется еще один класс, который содержит в себе List<Item>: Code: public class Good { private List<Item> LT; public Good() { LT = new List<Item>(); } public void SetParam(string s1, string s2) { LT.Add(new Item(s1, s2)); } } Мне нужно сравнение двух "Item"-ов, ну как то не могу догнать до конца как переопределить Equals в моём случае..в msdn немного замудрёнyый пример там класс унаследует класс и в нём делается переопределение... Ну вот собственно ссыль - http://msdn.microsoft.com/ru-ru/library/ms173147%28v=vs.80%29.aspx P.S. В Delphi я передавал в List<T> -> ICompare, и в функции Compare делал сравнение Item'ов...
Я не понял, что ты хочешь сравнить - два класса что ли? Или переменные стринги? Как то я даже завис...
Привет. По умолчанию equals сравнивает ссылки. Если тебе нужно сравнивать по значениям членов класса, то можно так: PHP: public override bool Equals(object obj) { return obj is Item && ((Item) obj).param1 == this.param1 && ((Item) obj).param2 == this.param2; } public override int GetHashCode() { return param1.GetHashCode() ^ param2.GetHashCode(); } тогда PHP: new Item("str1", "str2").Equals(new Item("str1", "str2")) вернет true еще можно операторы == и != переопределить: PHP: public static bool operator ==(Item item1, Item item2) { return object.ReferenceEquals(item1, item2) || item1.Equals(item2); } public static bool operator !=(Item item1, Item item2) { return !(item1 == item2); } писал быстро, возможно надо еще добавить проверку на null'ы.
GhostOnline Привет, ну переопределяем Equals в Item, но IndexOf \ Contains отказываются работать))) А ты в icq больше не появляешься? только переменные, нужно заставить сравнивать..и затем выполнять поиск по IndexOf
шо, правда? да сегодня только вот был. тебя там не видел. кстати мы же вроде эту тему с поиском в списке уже обсуждали, разве нет?
днём на работе был просто) так ну щас я еще раз проверю просто список загружаю в List<T> знаю, что две строки одинаковые...а прога в лист добавляет всё равно. Да ты мне показывал как переопределять метод..ну ты пример давал class1 ... class2 унаследует class1 и переопределяется метод) я немного запутался в том примере))) Да, вот только не понял зачем еще GetHashCode() переопределять..? че за пародия на pastbin?
Часто для сравнения именно GetHashCode используют, наример если нужно дубликаты удалить. У pastbin2 интерфейс менее загруженный, чем у оригинала. Люблю минимализм.
Так, ну наверное я догнал почему False у меня) я то храню данные в массиве байтов. =\ я думал он сравнивает одинаковый массив байтов и даёт True при одинаковых значениях..видать нет =) Как сравнить два массива байтов?
совсем запутал. спрашивал про IndexOf|Contains, а оказалось сравнение массивов. PHP: byte[] arr1 = new byte[]{1,2,3}, arr2 = new byte[]{1,2,3}; bool b = arr1.SequenceEqual(arr2);
ну я тут от руки писал и написал string param1 и param2...а у меня массив байтов.. т.е. byte[] param1 и byte[] param2. Со строками Equals заработал на ура. Ну теперь и с массивом байт норм работает