484 votes

Est-il préférable de renvoyer nulle ou vide collection ?

qui est un peu éteint une question générale (mais je suis en utilisant c#), ce qui est le meilleur moyen (meilleures pratiques), retournez-vous collection nulle ou vide pour une méthode qui possède une collection comme un type de retour ?

565voto

Will Points 76760

Vide de la collection. Toujours.

Cette suce:

if(myInstance.CollectionProperty != null)
{
  foreach(var item in myInstance.CollectionProperty)
    /* arrgh */
}

Il est considéré comme une meilleure pratique de ne JAMAIS revenir null lors du retour d'une collection ou énumérables. TOUJOURS retourner un vide énumérable/collection. Il empêche la précités non-sens, et empêche votre voiture d'obtenir poussé par les co-travailleurs et les utilisateurs de vos classes.

Lorsque l'on parle de propriétés, définissez toujours votre propriété une fois et l'oublier

public List<Foo> Foos {public get; private set;}

public Bar() { Foos = new List<Foo>(); }

Lorsque l'on parle de méthodes qui retournent des enumerables, vous pouvez facilement retourner un vide énumérable au lieu de null...

public IEnumerable<Foo> GetMyFoos()
{
  return InnerGetFoos() ?? Enumerable.Empty<Foo>();
}

À l'aide de Enumerable.Empty<T>() peut être considéré comme plus efficace que le renvoi, par exemple, un nouveau vide collection ou un tableau.

166voto

RichardOD Points 19942

De la Conception du Cadre des lignes Directrices de la 2e Édition (pg. 256):

NE retournez PAS les valeurs null à partir de les propriétés de collection ou de méthodes le retour des collections. De retour d'un vide collection ou un tableau vide à la place.

Voici un autre article intéressant sur les avantages de ne pas retourner les valeurs null (j'ai essayé de trouver quelque chose sur Brad Abram blog, et qu'il a lié pour l'article).

Edit- Eric Lippert a maintenant fait des remarques à la question d'origine, j'aimerais aussi le lien pour son excellent article.

94voto

Bozho Points 273663

Dépend de votre contrat et de votre cas concret. Généralement il est préférable de revenir à vide collections, mais parfois (rarement):

  • null pourrait signifier quelque chose de plus précis;
  • votre API (contrat) pourrait vous forcer à revenir null.

Quelques exemples concrets:

  • un composant de l'INTERFACE utilisateur (à partir d'une bibliothèque hors de votre contrôle), pourrait être rendu d'une table vide, si vide de collecte est passé, ou pas de table à tous, si une valeur null est passé.
  • dans un Objet-XML (JSON/whatever), où null signifie que l'élément est manquant, tandis qu'un regroupement vide rendrait redondant (et peut-être incorrectes) <collection />
  • vous utilisez ou la mise en œuvre d'une API, qui stipule explicitement que null doit être retourné/passé

36voto

Jeffrey L Whitledge Points 27574

Il y a un autre point qui n’a pas encore été mentionné. Examinons le code suivant :

Le langage c# retourne un énumérateur vide lorsque vous appelez cette méthode. Par conséquent, pour être cohérente avec la langue conception (et, par conséquent, les attentes programmeur) une collection vide doit être retournée.

32voto

George Polevoy Points 2751

Vide est beaucoup plus convivial.

Il y a une méthode claire de qui composent une collection dénombrable :

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