Powiedzmy, że otrzymujesz następujące ...
List<Thing> theThings = fubar.Things.All();
Gdyby nie było nic do zwrócenia, czego można oczekiwać od fubar.Things.All ()?
Edycja: Dzięki za opinie. Zaczekam chwilę i zaakceptuję zgłoszenie z największą liczbą wzlotów.
Zgadzam się z dotychczasowymi odpowiedziami, szczególnie tymi sugerującymi pustą kolekcję. Sprzedawca dostarczył interfejs API z kilkoma wywołaniami podobnymi do powyższego przykładu. Sprzedawca, który w ubiegłym roku osiągnął przychody w wysokości 4,6 miliona USD dzięki swoim interfejsom API, BTW. Robią coś, z czym zasadniczo się nie zgadzam - rzucają wyjątek.
Things
? Jeśli sensowne jest, abyThings
pole zwróciło wartość null, wówczas uzasadnione jest otrzymanie wyjątku, ponieważ przed wywołaniem nie sprawdzono wartości nullAll()
. Zgadzam się jednak z ludźmi, którzy uważają, żefubar.Things
powinien zwrócić pustą kolekcję zamiast wartości zerowej.Odpowiedzi:
Z dwóch możliwości (tj. Zwrócenie a
null
lub zwrócenie pustej kolekcji) wybrałbym zwrócenie pustej kolekcji, ponieważ pozwala to dzwoniącemu pominąć sprawdzenie zwróconej wartości. Zamiast pisać tomogliby to napisać:
Ten drugi fragment kodu jest krótszy i łatwiejszy do odczytania, ponieważ poziom zagnieżdżenia jest niższy o jeden.
źródło
Spodziewałbym się pustej listy.
theThings
nadal będzie przedmiotem, aletheThings.Count
czytheThings.size()
wróci0
.źródło
Takie problemy projektowe rozwiązuje wzorzec Null Object
Sugestia szczególnie przydatna w twoim przypadku (zwrot,
List
gdy nie ma żadnychThing
) to:źródło
Powinieneś, IMHO, zwrócić PUSTĄ wartość. Nie wiem o C #, ale w Javie mamy to:
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html
źródło
Enumerable.Empty<T>()
, który zwraca pustyIEnumerable<T>
(patrz msdn.microsoft.com/en-us/library/bb341042.aspx )Zwrócę pustą kolekcję po zwróceniu wartości pustej, ponieważ w ten sposób można uniknąć wpisania pustej weryfikacji w kodzie wywołującym.
źródło
Dwa rozwiązania oznaczają różne rzeczy.
Jeśli zwracasz tylko zero, ZAWSZE zwracasz pustą kolekcję! Weźmy przykład z katalogu. Jeśli w katalogu nie ma żadnych plików, zwracana jest pusta kolekcja plików.
Z drugiej strony, jeśli katalog nie istnieje, nie jest to właściwe. „Nic nie mogę zwrócić” oznacza coś zupełnie innego. W takim przypadku powinieneś zwrócić wartość null lub zgłosić wyjątek w zależności od sytuacji, nie zwracaj tylko pustej kolekcji, jakby nic nie było nie tak.
źródło