Angenommen, Ihnen wird Folgendes gegeben ...
List<Thing> theThings = fubar.Things.All();
Wenn nichts zurückzukehren wäre, was würden Sie von fubar.Things.All () erwarten?
Edit: Danke für die Meinungen. Ich werde ein bisschen warten und den Eintrag mit den meisten Ups annehmen.
Ich bin mit den bisherigen Antworten einverstanden, insbesondere mit denen, die eine leere Sammlung vorschlagen. Ein Anbieter hat eine API mit mehreren Aufrufen bereitgestellt, die dem obigen Beispiel ähneln. Ein Anbieter, der im vergangenen Jahr mit seinen APIs einen Umsatz von 4,6 Millionen US-Dollar erzielt hat. Sie tun etwas, mit dem ich grundsätzlich nicht einverstanden bin - sie werfen eine Ausnahme.
Things
? Wenn es sinnvoll ist, dasThings
Feld null zurückgeben zu lassen, ist es sinnvoll, dass Sie eine Ausnahme erhalten, da Sie vor Ihrem Aufruf von nicht auf null geprüft habenAll()
. Ich stimme jedoch den Leuten zu, die denken, dassfubar.Things
eine leere Sammlung anstelle von null zurückgegeben werden sollte.Antworten:
Von den beiden Möglichkeiten (dh Rückgabe
null
einer leeren Sammlung oder Rückgabe einer leeren Sammlung) würde ich die Rückgabe einer leeren Sammlung wählen, da der Aufrufer eine Überprüfung des zurückgegebenen Werts überspringen kann. Anstatt dies zu schreibenSie könnten folgendes schreiben:
Dieses zweite Codefragment ist kürzer und einfacher zu lesen, da die Verschachtelungsebene um eins niedriger ist.
quelle
Ich würde eine leere Liste erwarten.
theThings
wäre immer noch ein Objekt, abertheThings.Count
odertheThings.size()
würde zurückkehren0
.quelle
Derartige Designprobleme werden durch das Null-Objektmuster behoben
In Ihrem Fall besonders zutreffender Vorschlag (Rückgabe,
List
wenn keineThing
s vorhanden sind ):quelle
Sie sollten meiner Meinung nach einen leeren Wert zurückgeben. Ich kenne C # nicht, aber in Java haben wir Folgendes:
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html
quelle
Enumerable.Empty<T>()
, das eine leere zurückgibtIEnumerable<T>
(siehe msdn.microsoft.com/en-us/library/bb341042.aspx )Ich würde eine leere Auflistung über die Rückgabe eines Nullwerts zurückgeben, da Sie auf diese Weise vermeiden können, eine Nullüberprüfung in den aufrufenden Code zu schreiben.
quelle
Die beiden Lösungen bedeuten unterschiedliche Dinge.
Wenn es nur null von der Sache gibt, die Sie zurückgeben, geben Sie IMMER eine leere Sammlung zurück! Nehmen Sie den Fall einer Verzeichnisliste. Wenn das Verzeichnis keine Dateien enthält, wird eine leere Dateisammlung zurückgegeben.
Wenn das Verzeichnis jedoch nicht vorhanden ist, ist dies nicht wirklich angemessen. "Ich kann nichts zurückgeben" bedeutet etwas völlig anderes. In diesem Fall sollten Sie entweder null zurückgeben oder eine Ausnahme auslösen. Geben Sie nicht einfach eine leere Auflistung zurück, als wäre nichts falsch.
quelle