Disons que l'on vous donne ce qui suit ...
List<Thing> theThings = fubar.Things.All();
S'il n'y avait rien à retourner, à quoi vous attendriez-vous que fubar.Things.All () revienne?
Edit: Merci pour les opinions. J'attendrai un peu et accepterai l'entrée avec le plus grand nombre.
Je suis d'accord avec les réponses jusqu'à présent, en particulier celles suggérant une collection vide. Un fournisseur a fourni une API avec plusieurs appels similaires à l'exemple ci-dessus. Un fournisseur qui a réalisé un chiffre d'affaires de 4,6 millions de dollars via ses API l'an dernier, BTW. Ils font quelque chose avec lequel je suis fondamentalement en désaccord - ils lèvent une exception.
Things
? S'il est logique que leThings
champ renvoie null, il est logique que vous receviez une exception car vous n'avez pas vérifié null avant votre appel àAll()
. Cependant, je suis d'accord avec les gens qui pensentfubar.Things
devoir retourner une collection vide au lieu de null.Réponses:
Parmi les deux possibilités (c'est-à-dire retourner une
null
ou retourner une collection vide), je choisirais de retourner une collection vide, car cela permet à l'appelant de sauter une vérification de la valeur retournée. Au lieu d'écrire ceciils pourraient écrire ceci:
Ce deuxième fragment de code est plus court et plus facile à lire, car le niveau d'imbrication est inférieur de un.
la source
Je m'attendrais à une liste vide.
theThings
serait toujours un objet, maistheThings.Count
outheThings.size()
reviendrait0
.la source
Les problèmes de conception comme celui-ci sont résolus par le modèle d'objet nul
La suggestion particulièrement applicable dans votre cas (retour
List
lorsqu'il n'y a pas deThing
s) est:la source
Vous devriez, à mon humble avis, retourner une valeur VIDE. Je ne connais pas C #, mais en Java, nous avons ceci:
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html
la source
Enumerable.Empty<T>()
, qui renvoie un videIEnumerable<T>
(voir msdn.microsoft.com/en-us/library/bb341042.aspx )Je retournerais une collection vide au-dessus de renvoyer une valeur nulle parce que de cette façon vous pouvez éviter d'écrire une vérification nulle dans le code appelant.
la source
Les deux solutions signifient des choses différentes.
S'il n'y a rien de ce que vous retournez, vous retournez TOUJOURS une collection vide! Prenons le cas d'une liste d'annuaire. S'il n'y a aucun fichier dans le répertoire, vous retournez une collection vide de fichiers.
En revanche, si le répertoire n'existe pas, ce n'est pas vraiment approprié. «Je ne peux rien retourner» signifie quelque chose de complètement différent. Dans ce cas, vous devez retourner null ou lever une exception en fonction de la situation, ne renvoyez pas simplement une collection vide comme si de rien n'était.
la source