что лучше, используя обнуляемый или логический параметр return + out - PullRequest
6 голосов
/ 26 ноября 2009

Допустим, у меня есть функция, которая должна возвращать некоторое целочисленное значение. но он также может потерпеть неудачу, и мне нужно знать, когда это произойдет.

Какой способ лучше?

public int? DoSomethingWonderful()

или

public bool DoSomethingWonderful(out int parameter)

Возможно, это скорее вопрос стиля, но мне все еще интересно, какой вариант люди выберут.

Редактировать: уточнение, этот код говорит с черным ящиком (давайте назовем его облаком. Нет, черным ящиком. Нет, подождите. Облако. Да). Мне все равно, почему это не удалось. Мне просто нужно знать, есть ли у меня действительное значение или нет.

Ответы [ 12 ]

0 голосов
/ 26 ноября 2009

Вы должны вместо этого использовать попытку поймать. Кажется, что звонящий не знает, что может произойти?

Должны ли мы проверить как bool, так и out, или я должен проверить, что оба возвращают null и фактический возврат.

Пусть метод делает то, что должен, а в случае, если он потерпел неудачу, пусть вызывающий знает, что он потерпел неудачу, и его имя должно быть требуемым.

0 голосов
/ 26 ноября 2009

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

И наоборот, если существует несколько способов его сбоя, и вызывающий код может захотеть точно знать, почему произошел сбой, тогда перейдите с параметром out и верните код ошибки вместо bool (в качестве альтернативы вы можете вызвать исключение , но, исходя из вашего вопроса, кажется, вы уже решили не создавать исключение).

...