Ваше предложение о result = result
не будет работать, потому что это out
параметр - это не определенно присвоенной, чтобы начать с, так что вы не можете прочитать его значение, пока вы не присваивается значение для него.
result = null;
, безусловно, правильный путь для параметра object
из. В основном используйте default(T)
для любого типа T
у вас есть. (Оператор default
полезен в общих методах - для нестандартного кода я бы обычно использовал null
, 0, что бы то ни было.)
РЕДАКТИРОВАТЬ: На основании комментария Бориса, возможно, стоит остановиться на различии между параметр ref
и параметр out
:
Out параметры
- не должны быть определенно присвоены вызывающим
- В начале метода обрабатываются как «не определенно назначенные» (вы не можете прочитать значение, не назначая его сначала, точно так же, как локальная переменная)
- Должно быть определенно присвоено (по методу) до метод обычно заканчивается (т.е. прежде чем он вернется; он может выбросить исключение без присвоения значения параметра)
Ref параметры
- У должно быть определенно присвоены вызывающим
- рассматривается как «определенно присвоенные» в начале метода (так что вы можете прочитать значение без его назначения в первую очередь)
- Не нужно назначать внутри метода (т. е. вы можете оставить параметр с его исходным v alue)
Итак, это общепринятая процедура для перезаписывания любого значения, которое было выбрано в первую очередь? –
Это больше, чем принято: требуется. Параметр out * обязательно должен быть определен до того, как метод завершится нормально (то есть возвращает, а не бросает) –
Невозможно сделать иначе. Это то, что означает «выход» - ценность клиента будет (над) написана. Преимущество «out» над «ref» заключается в том, что клиенту не нужно беспокоиться о инициализации переменной, он может просто объявить об этом, заверил, что какое-то «начальное» значение будет установлено при передаче в позицию «out». – Brian