Как не возвращать null?

Есть метод, который возвращает объект, если он имеется в списке. Как избавиться от возвращения null, если объектов в списке нет?

Допустим:

public SomeObject ReturnSomeObject(){
    return (SomeObjectList.Count > 0) ? SomeObjectList[0] : null;
}
5 ответов

Если не хочется возвращать null, то самым разумным будет генерировать исключение, что-нибудь вроде ObjectNotFoundException().


Поздравляю! Вы вышли на путь открытия т.н. "типа-опции" (option type), который более развитые языки программирования (Scala, F#, Ocaml, Haskell, и т.д.) используют уже давным давно. В C#, равно как и в Java, такого типа нет, но его легко сделать самостоятельно. Для начала, рекомендую вам прочитать мой ответ на вопрос "Язык программирования без null", чтобы понять, что такое тип-опция. Затем переходите к статье "Option type implementation in C#", в которой показано, как реализовать и применять этот тип в C#.


Возвращать новый объект, например. Или хранить экземпляр, возвращаемый по умолчанию, в поле класса и возвращать его, если список пуст.


Нельзя просто не возвращать, нужно выбрать, что делать вместо этого. Хотя, как мне кажется, пространства для выбора и нет - только выбрасывать исключение


В некоторых ситуациях может быть уместным использование паттерна "Null Object" - возвращать объект подкласса (или как это лучше сделать в C#), который реализует операции класса пустыми - другими словами, NOP-реализацию. С этим паттерном, конечно, нужно быть осторожным и привлекать только при полной уверенности, что выгоды перевесят усложнение системы.

licensed under cc by-sa 3.0 with attribution.