2011-12-02 335 views
0

它的后期所以这可能是一个愚蠢的问题...
如果鱼是一个类(没有Equal/operator ==覆盖/重载),我想获得一个特定的鱼匹配从目前我做的鱼类列表或ObservableCollection参考平等:ObservableCollection查找项目匹配的参考相等

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); 

,但似乎无法找到它。

+0

问题,是你想知道的是否它是否存在?由于search_fish == found_fish,你真的需要found_fish吗? –

+0

@JamesMichaelHare好点! - 我确实提到它迟到了......如果你把这个作为答案,我会接受它。 (即只使用Contains) – Ricibob

+0

Nah,Rick打败我包含()公平和正方形:-),感谢您的考虑,虽然... –

回答

1

由于found_fish或者是search_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; 
+0

谢谢 - 现在似乎很明显 - 有一定的时间睡觉。 – Ricibob

1

是的,这是正确的方法。

Find需要Preciate<Fish>FirstOrDefault需要Func<Fish, bool>,所以您的签名将适用于两者;两个签名都需要一个Fish,并且返回一个布尔值。

但因为你真的只是测试,看看是否给定的鱼是你的收藏,为什么不使用Any()

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