Допустим, вам дано следующее ...
List<Thing> theThings = fubar.Things.All();
Если бы нечего было возвращать, чего бы вы ожидали от fubar.Things.All ()?
Редактировать: Спасибо за мнения. Я подожду немного и приму запись с наибольшим количеством взлетов.
Я согласен с ответами, особенно теми, которые предлагают пустую коллекцию. Поставщик предоставил API с несколькими вызовами, аналогичными приведенному выше примеру. Вендор, который в прошлом году заработал 4,6 млн. Долл. США через свои API, BTW. Они делают то, с чем я принципиально не согласен - они бросают исключение.
Things
? Если имеет смысл иметьThings
поле, возвращающее нуль, то имеет смысл получить исключение, потому что вы не проверяли ноль перед вызовомAll()
. Однако я согласен с людьми, которые думают, чтоfubar.Things
следует возвращать пустую коллекцию вместо нуля.Ответы:
Из двух возможностей (то есть, возврата
null
или возврата пустой коллекции) я бы выбрал возврат пустой коллекции, потому что это позволяет вызывающей стороне пропустить проверку возвращенного значения. Вместо того, чтобы писать этоони смогут написать это:
Этот второй фрагмент кода короче и его легче читать, потому что уровень вложенности ниже на единицу.
источник
Я ожидал бы пустой список.
theThings
все равно будет объектом, ноtheThings.Count
илиtheThings.size()
вернется0
.источник
Подобные проблемы проектирования решаются с помощью шаблона Null Object.
Предложение особенно применимо в вашем случае (возвращение,
List
когда нетThing
s):источник
ИМХО, вы должны вернуть ПУСТОЕ значение. Я не знаю о C #, но в Java у нас есть это:
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html
источник
Enumerable.Empty<T>()
, который возвращает пустойIEnumerable<T>
(см. Msdn.microsoft.com/en-us/library/bb341042.aspx )Я бы возвратил пустую коллекцию вместо возврата нулевого значения, потому что таким образом вы можете избежать записи нулевой проверки в вызывающем коде.
источник
Два решения они означают разные вещи.
Если есть только ноль того, что вы возвращаете, вы ВСЕГДА возвращаете пустую коллекцию! Возьмите случай со списком каталогов. Если в каталоге нет файлов, вы возвращаете пустую коллекцию файлов.
С другой стороны, если каталог не существует, это не совсем подходит. «Я ничего не могу вернуть» означает нечто совершенно иное. В этом случае вы должны либо возвратить ноль, либо выдать исключение в зависимости от ситуации, а не просто вернуть пустую коллекцию, как будто ничего не случилось.
источник