Как уже писал @Michael Randall, похоже, что это невозможно.
Я согласен, что ваш сомнительный код хорошо читается, имея список в методе RemoveAll.Но чтобы иметь экземпляр только один раз, у меня есть три идеи сделать это:
int[] a = null;
foo.RemoveAll(i => (a ?? (a = new[] { 1, 3, 5 })).Contains(i));
Это на самом деле ваше, с небольшим количеством необходимости в внешней переменной.
foo = foo.Except(new[] { 1, 3, 5 }).ToList();
Это довольно хорошее решение с использованием Linq.
new List<int>{1, 3, 5}.ForEach(x => foo.Remove(x));
new[] {1, 3, 5}.Iterate(x => foo.Remove(x));
Это то, что я бы сделал.Почти во всем моем коде у меня есть метод Extension "Iterate", чтобы избежать необходимости в foreach.А также, я не хочу все время «списывать», чтобы сделать .ForEach (..)
static class Extensions
{
public static void Iterate<TSource>(this IEnumerable<TSource> source, Action<TSource> action)
{
foreach (var item in source)
{
action.Invoke(item);
}
}
}