Мне нужно иметь дело с коллекциями данных, которые бросаются в мое приложение из источников данных из моего контроля. Некоторые из этих коллекций содержат нули, которые я бы предпочел отфильтровать, как только они попали в мой код, а не разбросали нулевой код проверки по всему месту. Я хочу сделать это в многоразовом общем виде и написал этот метод, чтобы сделать это:Удаление всех нулей из коллекций
public static void RemoveNulls<T>(this IList<T> collection) where T : class
{
for (var i = 0; i < collection.Count(); i++)
{
if (collection[i] == null)
collection.RemoveAt(i);
}
}
Я знаю, что на конкретном классе List есть RemoveAll()
метод, который может быть использован как:
collection.RemoveAll(x => x == null);
Но многие типы возврата основаны на интерфейсах (IList/IList ...), а не на конкретных типах.
Пожалуйста, не могли бы вы уточнить, почему вы не можете использовать 'RemoveAll'? –
И в чем вопрос? –
Код, который вы написали, не будет работать, поскольку удаление элемента сдвигает индексы всех последующих элементов вниз на 1. Каждый раз, когда вы удаляете нуль, ваш код пропускает проверку следующего элемента. –