Если вы хотите использовать LinkedList.Contains , вы можете сделать это, но Foo
, но реализовать IEquatable<Foo>
. LinkedList.Contains не работает через функцию предиката, а выполняет поиск определенного элемента. Чтобы использовать Contains, вы должны написать:
bool contains = list.Contains(foo);
Однако в этом случае вы можете рассмотреть возможность использования метода расширения Enumerable.Any () вместо Contains (). При этом он будет выглядеть как ваш предыдущий код, за исключением того, что вам не нужен первый «foo»:
Foo foo = new Foo(someString);
LinkedList<Foo> list = new LinkedList<foo>();
// Populate list with Foos
bool contains = list.Any(x => foo.Bar == x.Bar);
Поскольку "foo" отображается в текущей области видимости, при создании лямбда-выражения компилятор автоматически сгенерирует замыкание над переменной "foo", что позволит вам использовать его напрямую. Вам нужно только указать имя аргумента (x) для использования в функции предиката, созданной в лямбда-выражении.
Для этого требуется ссылка на System.Core.dll и using System.Linq;
в верхней части файла, а также .NET 3.5 +.