Я оказался в ситуации, когда мне пришлось что-то сделать с элементами списка, а затем удалить их из этого списка:
foreach (var element in someList.Where(e => e.IsMatching))
{
// do some stuff
}
someList.RemoveAll(e => e.IsMatching);
Это прекрасно работает, но мне не нравится дублирующаяся лямбда поэтому я объявил Func<T, bool> x = e => e.IsMatching;
, а затем попытался использовать x
в качестве параметра для .Where
и .RemoveAll
, но я не смог использовать x
для .RemoveAll
, поскольку его перегрузка принимает только Predicate<T>
.
Почему неявное и явное приведение невозможно, так как оба имеют одинаковые возвращаемые значения и типы параметров?
(Я не ищу способ выполнить преобразование, все в нем уже в этом вопросе )