public static Operator CreateSubtraction <TIn1, TIn2, TResult>(BinaryOperatorCallback <TIn1, TIn2, TResult> eval) where TIn1 : IMeasurement <TIn1> where TIn2 : IMeasurement <TIn2> where TResult : IMeasurement <TResult> { Validate.NonNull(eval, nameof(eval)); return(new BinaryOperator( typeof(TIn1), typeof(TIn2), BinaryOperatorType.Subtraction, (x, y) => InvokeBinaryOperator(x, y, eval) )); }
private static object InvokeBinaryOperator <TIn1, TIn2, TResult>(object x, object y, BinaryOperatorCallback <TIn1, TIn2, TResult> eval) where TIn1 : IMeasurement <TIn1> where TIn2 : IMeasurement <TIn2> where TResult : IMeasurement <TResult> { if (x is TIn1 in1 && y is TIn2 in2) { return(eval(in1, in2)); } return(null); }