/// <summary> /// Вычисляет описанную цепочкой функцию. /// </summary> /// <typeparam name="TA">Тип аргумента.</typeparam> /// <typeparam name="TV">Тип функции.</typeparam> /// <param name="last">Последний элемент цепочки.</param> /// <param name="argument">Аргумент функции.</param> /// <returns>Вычисленное значение.</returns> public static TV Compute <TA, TV>(this FunctionNode <TA, TV> last, TA argument) { if (last == null) { throw new ArgumentNullException("last"); } return(last.ComputeFunction(argument)); }
/// <summary> /// Завершает цепочку описания функции и вычисляет ее. /// </summary> /// <typeparam name="TA">Тип аргумента.</typeparam> /// <typeparam name="TV">Тип функции.</typeparam> /// <param name="previous">Предыдущий элемент цепочки.</param> /// <param name="value">Значение по умолчанию.</param> /// <param name="argument">Аргумент функции.</param> /// <returns>Вычисленное значение.</returns> public static TV Otherwise <TA, TV>(this FunctionNode <TA, TV> previous, TV value, TA argument) { var last = new FunctionNode <TA, TV>(previous, value); try { return(last.ComputeFunction(argument)); } catch // handled { return(value); } }