/// <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); } }
internal FunctionNode(FunctionNode <TA, TV> previous, TA argument, TV value) { if (null == previous) { throw new ArgumentNullException("previous"); } Argument = argument; Value = value; Previous = previous; previous.Next = this; }
internal FunctionNode(FunctionNode <TA, TV> previous, TV value) { if (null == previous) { throw new ArgumentNullException("previous"); } if (previous.Terminating) { throw new ArgumentException("Function is already terminated."); } Value = value; Previous = previous; previous.Next = this; Terminating = true; Constant = true; }
/// <summary> /// Завершает цепочку описания функции. /// </summary> /// <typeparam name="TA">Тип аргумента.</typeparam> /// <typeparam name="TV">Тип функции.</typeparam> /// <param name="previous">Предыдущий элемент цепочки.</param> /// <param name="value">Значение по умолчанию.</param> /// <returns>Вычисленное значение.</returns> public static FunctionNode <TA, TV> Otherwise <TA, TV>(this FunctionNode <TA, TV> previous, TV value) { return(new FunctionNode <TA, TV>(previous, value)); }
/// <summary> /// Продолжает цепочку описания функции и вычисляет ее. /// </summary> /// <typeparam name="TA">Тип аргумента.</typeparam> /// <typeparam name="TV">Тип функции.</typeparam> /// <param name="previous">Предыдущий элемент цепочки.</param> /// <param name="argument">Аргумент.</param> /// <param name="value">Значение.</param> /// <returns>Элемент цепочки.</returns> public static FunctionNode <TA, TV> On <TA, TV>(this FunctionNode <TA, TV> previous, TA argument, TV value) { return(new FunctionNode <TA, TV>(previous, argument, value)); }