У меня есть этот код, где LongMethodWithResult
это метод, который занимает много времени для запуска:Сжатый способ использования условного оператора
object o = LongMethodWithResult() == someVal ? LongMethodWithResult() : someOtherResult;
Теперь метод LongMethodWithResult
оценивается в два раза, не так ли?
Я знаю, что я мог бы написать метод, который использует переменные для хранения результата длинного метода, что-то вроде этого:
public static object ConciseConditionalOperator(object a, object b, object c)
{
return a == b ? a : c;
}
Но я был бы заинтересован в том, есть ли лучший способ сделать это или некоторые функции, обслуживаемые C# или .NET.
Любые идеи приветствуются!
В вашем случае вы не можете сделать 'объекта о = LongMethodWithResult() == someVal? someVal: someOtherResult; '? – KMoussa
Я бы, как правило, ограничил использование условных выражений простым логическим выражением без побочных эффектов, которые вызывают выбор между двумя значениями. Типичным примером K & R является выбор между множественным числом s и пустой строкой при печати текста в зависимости от числа! = 1. –
Чтобы избежать яркого ярлыка @ PeterB (все еще проницательного), вы можете запросить отношение, отличное от идентификатора, например. 'LongMethodWithResult() <= someVal? ... ' –