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

280
22 августа 2017, 10:38

Добрый день столкнулся с такой проблемой: функция IndexOf класса ObservableCollection всегда возвращает -1. Вот код:

ObservableCollection<Item> FilterMask = new ObservableCollection<Item>();
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 появляются дубликаты, чего не должно быть согласно коду=)

Answer 1

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

READ ALSO
Некорректная работа setInterval

Некорректная работа setInterval

Всем привет! Пытаюсь создать игру(кликер)Кликая на настройки(settings), запускается функция, в которую вложены еще несколько функций

285