2011-12-02 26 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);