Я пытаюсь формализовать использование ключевого слова "out" в С# для проекта, в котором я работаю, особенно в отношении любых общедоступных методов. Кажется, я не могу найти лучшие практики и хотел бы знать, что хорошо или плохо.
Иногда я вижу некоторые подписи методов, которые выглядят так:
public decimal CalcSomething(Date start, Date end, out int someOtherNumber){}
В этот момент это просто чувство, это не очень хорошо со мной. По какой-то причине я бы предпочел увидеть:
public Result CalcSomething(Date start, Date end){}
где результат - это тип, который содержит десятичное число и некоторое другое число. Я думаю, что это облегчает чтение. Это позволяет продлить результат или добавить свойства без нарушения кода. Это также означает, что вызывающему устройству этого метода не нужно объявлять локальный облачный "someOtherNumber" перед вызовом. Из ожиданий использования не все абоненты будут заинтересованы в "someOtherNumber".
В отличие от этого, единственные экземпляры, которые я могу представить прямо сейчас в рамках .Net, где параметры "out" имеют смысл, - это методы, подобные TryParse(). Это на самом деле заставляет вызывающего абонента писать более простой код, в котором вызывающий пользователь в первую очередь будет интересоваться параметром out.
int i;
if(int.TryParse("1", i)){
DoSomething(i);
}
Я думаю, что "выход" должен использоваться только в том случае, если тип возврата - bool, и ожидаемые условия использования - это то, где параметры "out" всегда будут интересовать вызывающего, по дизайну.
Мысли?