158 votes

Est-ce que if(items != null) est superflu avant foreach(T item in items) ?

Je rencontre souvent un code comme le suivant :

if ( items != null)
{
   foreach(T item in items)
   {
        //...
   }
}

En principe, le if La condition garantit que foreach Le bloc ne s'exécutera que si items n'est pas nulle. Je me demande si le if est réellement nécessaire, ou foreach traitera le cas si items == null .

Je veux dire par là que je peux simplement écrire

foreach(T item in items)
{
    //...
}

sans se préoccuper de savoir si items est nulle ou non ? Est-ce que le if condition superflue ? Ou bien cela dépend de la type de items ou peut-être sur T également ?

0voto

Reniuz Points 5951

Comme indiqué aquí il faut vérifier si elle n'est pas nulle.

N'utilisez pas d'expression dont la valeur est nulle.

0voto

jeancallisti Points 331

La réponse acceptée est le vieillissement. De nos jours, les types nullables sont largement utilisées et aident le compilateur à comprendre ce que vous essayez d'accomplir (et à éviter les erreurs).

Cela signifie que votre liste pourrait être la suivante :

List<Item>? list

...OU... ceci :

List<Item> list

Vous ne devrez vérifier la nullité que dans le premier cas.

Il en va de même pour les articles :

List<Item?> list

...OU... ceci :

List<Item> list

Vous ne devrez vérifier la nullité des éléments que dans le premier cas.

Et bien sûr, vous avez enfin ceci :

List<Item?>? list

où tout (liste et éléments) peut potentiellement être nul.

\==================

EDIT : Une image vaut mieux que 1 000 mots

enter image description here

enter image description here

enter image description here

-1voto

dr. rai Points 1000

En C# 6, vous pouvez écrire quelque chose comme ceci :

// some string from file or UI, i.e.:
// a) string s = "Hello, World!";
// b) string s = "";
// ...
var items = s?.Split(new char[] { ',', '!', ' ' }) ?? Enumerable.Empty<string>();  
foreach (var item in items)
{
    //..
}

Il s'agit essentiellement de la solution de Vlad Bezden, mais en utilisant l'expression ? ? pour toujours générer un tableau qui n'est pas nul et qui survit donc au foreach, plutôt que d'avoir cette vérification à l'intérieur de l'accolade foreach.

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