Страницы

Поиск по вопросам

четверг, 18 апреля 2019 г.

Класс ObservableCollection и функция IndexOf

Добрый день столкнулся с такой проблемой: функция IndexOf класса ObservableCollection всегда возвращает -1. Вот код:
ObservableCollection FilterMask = new ObservableCollection(); foreach(Worker w in ListWorker) { if(w.Directions.Count == 0) continue; Item ForFilter = new Item() { Text = w.Directions[0], IsSelected = true }; if (FilterMask.IndexOf(ForFilter) == -1) FilterMask.Add(ForFilter); }
Пример класса Item:
public class Item : INotifyPropertyChanged { string _Text; public string Text { get { return _Text; } set { _Text = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Text")); } }
bool _IsSelected; public bool IsSelected { get { return _IsSelected; } set { _IsSelected = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("IsSelected")); } }
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion }
В FilterMask появляются дубликаты, чего не должно быть согласно коду=)


Ответ

Разумеется, возвращает -1. Ты создаёшь новый объект класса Item и ищешь его в коллекции. Он туда ещё не добавлен. Если ты хочешь, чтобы твой код работал, перегрузи в Item методы Equals и GetHashCode. Или полноценно реализуй интерфейс IEquatable

Комментариев нет:

Отправить комментарий