ObservableCollection在引用相等性上查找项匹配

时间:2011-12-02 02:11:22

标签: c# list observablecollection

迟到所以这可能是一个愚蠢的问题...... 如果Fish是一个类(没有Equal / operator == overrides / overloads),我想从List或ObservableCollection of Fish获得与引用相等匹配的特定鱼,目前我这样做:

Fish found_fish1 = my_list.Find(f => f==search_fish);
Fish found_fish2 = my_observable_collection.FirstOrDefault(f => f==search_fish);

这是最好的方法吗?我期待一个带有鱼的XXXX方法(类似于删除),例如

Fish found_fish = my_observable_collection.XXXX(search_fish);

但似乎无法找到它。

2 个答案:

答案 0 :(得分:1)

是的,这是正确的方法。

Find需要Preciate<Fish>FirstOrDefault需要Func<Fish, bool>,因此您的签名适用于两者;两个签名都需要一个Fish,返回值为boolean。

但是,既然你真的只是想测试一下给定的鱼是否在你的收藏中,为什么不用Any()

bool searchFishExists = my_observable_collection.Any(f => f == search_fish);

答案 1 :(得分:1)

由于found_fishsearch_fishnull,您可以使用ICollection<T>.Contains

Fish found_fish1 =
    my_list.Contains(search_fish) ? search_fish : null;
Fish found_fish2 =
    my_observable_collection.Contains(search_fish) ? search_fish : null;