ObservableCollection найти соответствие элемента по ссылочному равенству - PullRequest
0 голосов
/ 02 декабря 2011

Поздно, так что это может быть глупый вопрос ...
Если Fish - это класс (без Equal / operator == переопределений / перегрузок), и я хочу получить конкретную рыбу, сопоставленную по равенству ссылок из спискаили ObservableCollection of Fish (es) в настоящее время я делаю:

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 ]

1 голос
/ 02 декабря 2011

Поскольку found_fish равно search_fish или null, вы можете использовать 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;
1 голос
/ 02 декабря 2011

Да, это правильный путь.

Find занимает Preciate<Fish>, а FirstOrDefault - Func<Fish, bool>, поэтому ваша подпись будет работать для обоих;обе подписи ожидают единственное Fish и возвращаемое значение логического типа.

Но поскольку вы действительно просто проверяете, есть ли данная рыба в вашей коллекции, почему бы не использовать Any()

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