Страницы

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

воскресенье, 9 февраля 2020 г.

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

#c_sharp #observablecollection


Добрый день столкнулся с такой проблемой: функция 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



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

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

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