Что касается эффективности, кто-нибудь знает, достаточно ли умен компилятор, чтобы не создавать массив, содержащий 1, 3, 5
для каждой итерации цикла в следующем коде?
var foo = new List<int> { 1, 2, 3, 4, 5 };
foo.RemoveAll(i => new[] { 1, 3, 5 }.Contains(i));
Я предпочитаю это для удобочитаемости, но не ради производительности.