下午好,我遇到了这样一个问题:ObservableCollection 类的 IndexOf 函数总是返回-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);
}
项目类示例:
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<T>
。