Ich würde definitiv eine leere Liste zurückgeben, so dass Methoden immer noch für das Objekt aufgerufen werden können, ohne dass Null-Checks erforderlich sind. Es gibt einen Unterschied zwischen dem Zurückgeben einer leeren Liste und dem Zurückgeben von nichts, so dass der aufrufende Code wahrscheinlich sowieso nicht erwartet, eine Null-Referenz zu erhalten (außer eine Ausnahme auftritt oder so).
Eine leere Liste ist, was ich als Anrufer erwarten würde. Null würde mir anzeigen, dass die "konzeptionelle Liste" nicht definiert ist, wie Null in einer Datenbank.
Außerdem werden Clients wie diese niemals fehlschlagen, wenn sie immer leere Sammlungen anstelle von null zurückgeben:
%Vor% Es hängt von einer Reihe von Faktoren ab, aber eine leere Liste wäre ein typischer Rückgabewert, da der Aufrufer andernfalls null
checking ausführen muss. Die Hauptzeit, die ich null
zurückgeben würde, wäre, wenn es eine Methode dieses Stils wäre:
Der Aufrufer erwartet (beim Empfang von false
), nicht einmal bei dem Wert von result
zu sehen.
Wenn Sie Arrays zurückgeben, gibt es einen netten Cheat - Sie können ein typisiertes Array der Länge Null in einem statischen Feld speichern, das irgendwo zurückgegeben wird. Aber letztendlich wird eine leere Liste keinen riesigen Overhead für die Zuweisung sein, also schick einfach das.
Laut MS sollten Sie niemals einen Null-String oder ein Array aus einem Feld oder einer Eigenschaft zurückgeben, und ich denke, dass dies auf Methoden erweitert werden könnte (und möglicherweise auch irgendwo, das ich nicht gefunden habe).
Beim Zurückgeben leerer Arrays:
String- und Array-Eigenschaften sollten niemals eine Nullreferenz zurückgeben. Null kann in diesem Zusammenhang schwierig zu verstehen sein.
Die allgemeine Regel besagt, dass leere, leere ("") und leere (0 Elemente) Arrays auf die gleiche Weise behandelt werden sollten. Gibt ein leeres Array anstelle eines Nullverweises zurück.
ist diese Methode eine ifc-Methode? was bedeutet das von externen Objekten, die nicht von Ihnen gesteuert werden? Wenn die Antwort ja lautet, würde ich eine leere Sammlung zurückgeben, da der Aufrufer keine Ausnahme erwartet.
Wenn diese Methode intern ist und Sie der einzige Benutzer sind, würde ich null ausgeben, um den verschwendeten Speicher für eine leere Sammlung und einen GC-Performance-Treffer zu speichern, sobald Sie ihn nicht mehr benutzen.
Besser ist es, IEnumerable<string>
zurückzugeben. Verwenden Sie yield return
und yield break
innerhalb Ihrer Methode, um Ihre Sammlung aufzubauen. Auf diese Weise verschieben Sie die Erstellung des Arrays. Schauen Sie hier nach, um weitere Informationen zu erhalten. Sie finden IEnumerable
hat den Vorteil, dass es innerhalb von Erweiterungsmethoden und linq-Abfragen verkettet werden kann:
Wenn Sie unbedingt eine vollständige Liste zurückgeben müssen (wegen der Faulheit von yield
), würde ich empfehlen, Ihre Methodensignatur wie folgt zu ändern:
Diese Technik hat drei Vorteile.
ICollection<string>
wird stark typisiert, ohne den von Ihnen verwendeten Speichermechanismus zu zeigen. Zurückkehrende konkrete Klassen sollten sparsam verwendet werden. Alternativen sind Dinge wie IList<string>
, ReadOnlyCollection<string>
und IEnumerable<string>
, aber der von Ihnen gewählte wählt sicherlich Ihre Absichten, was der Benutzer mit den Ergebnissen tun kann und was nicht, viel klarer. Immer Return Empty Liste. Und Sie vermeiden die am häufigsten auftretende Ausnahme - NullReferenceException
.
Tags und Links c#