135 votes

Comment supprimer tous les éléments nuls à l'intérieur d'une liste générique en une seule fois ?

Y a-t-il une méthode par défaut définie dans .Net pour C# afin de supprimer tous les éléments d'une liste qui sont null ?

List parameterList = new List{param1, param2, param3...};

Disons que certains des paramètres sont null; je ne peux pas le savoir à l'avance et je veux les supprimer de ma liste pour qu'elle ne contienne que des paramètres qui ne sont pas nuls.

262voto

Lance May Points 2471

Vous voudrez probablement ce qui suit.

List parameterList = new List{param1, param2, param3...};
parameterList.RemoveAll(item => item == null);

4 votes

Oui, c'est la même chose que ma réponse mais en utilisant la nouvelle syntaxe lambda C#3.

0 votes

@Mark: J'ai vu les secondes publiées et c'était serré (32, 33 et 34). ;)

1 votes

Oui... eh bien, votre réponse fonctionne même dans les anciennes versions donc +1! Alors, tiens! ;Þ

56voto

Paul Hiles Points 3887

Je ne connais pas de méthode intégrée, mais vous pourriez simplement utiliser Linq :

parameterList = parameterList.Where(x => x != null).ToList();

10 votes

Il convient d'éviter cela si parameterList est déjà une liste, car cela créera inutilement une nouvelle copie. Dans ce cas, utilisez la méthode RemoveAll comme le suggèrent les autres.

1 votes

Il s'agit probablement de la meilleure option si la collection est un Array.

27voto

Mark Bell Points 11287

La méthode RemoveAll devrait faire l'affaire :

parameterList.RemoveAll(delegate (object o) { return o == null; });

0 votes

Pourquoi ne pas utiliser la lambda ?

15 votes

Il s'agit d'une réponse vieille de quatre ans. À l'époque, C# 3 était relativement nouveau et j'utilisais encore C# 2 au quotidien. La syntaxe lambda est maintenant la bonne façon de procéder ; cependant, cette réponse fonctionne toujours, donc je l'ai laissée ici pour toute personne incapable d'utiliser la nouvelle syntaxe (quelle qu'en soit la raison).

2 votes

Je n'étais pas au courant que la syntaxe lambda est arrivée plus tard. Merci pour votre explication! Sans aucun doute, c'est valide.

12voto

user3450075 Points 101

La méthode OfType() ignorera les valeurs nulles :

List parameterList =
    new List{param1, param2, param3...};

IList parameterList_notnull = 
    parameterList.OfType();

12voto

Ryan Naccarato Points 9

Il y a une autre option simple et élégante:

parameters.OfType();

Cela supprimera tous les éléments qui ne sont pas de type EmailParameterClass ce qui filtrera évidemment tous les éléments de type null.

Voici un test:

class Program
{
    class Test { }

    static void Main(string[] args)
    {
        var list = new List();
        list.Add(null);
        Console.WriteLine(list.OfType().Count());// 0
        list.Add(new Test());
        Console.WriteLine(list.OfType().Count());// 1
        Test test = null;
        list.Add(test);
        Console.WriteLine(list.OfType().Count());// 1

        Console.ReadKey();
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X