protected override object[] ConvertBack(object value, Type[] targetTypes)
 {
     if (treeInfo.IsEmptyBackExpr() && !treeInfo.IsSimpleExpr())
     {
         errorHandler.Throw(ErrorHelper.Err101_TwoWay(), null);
     }
     if (treeInfo.IsEmptyBackExpr())
     {
         return(Enumerable.Range(0, calculator.Operands.Count()).Select(x => value).ToArray());
     }
     return(calculator.ResolveBack(values, value).ToArray());
 }
            protected override object[] ConvertBack(object value, Type[] targetTypes)
            {
                if (treeInfo.IsEmptyBackExpr() && !treeInfo.IsSimpleExpr())
                {
                    errorHandler.Throw(ErrorHelper.Err101_TwoWay(), null);
                }
                if (!isBackConvesionInitialized)
                {
                    Type valueType    = value.Return(x => x.GetType(), () => null);
                    var  backExprType = valueType ?? backConversionType;
                    if (backExprType == null)
                    {
                        errorHandler.Throw(ErrorHelper.Err104(), null);
                    }
                    calculator.InitBack(valueType ?? backConversionType);
                    isBackConvesionInitialized = true;
                }
                List <object> res = new List <object>();

                foreach (var op in calculator.Operands)
                {
                    if (!op.IsTwoWay || op.BackConverter == null)
                    {
                        res.Add(value);
                    }
                    else
                    {
                        res.Add(op.BackConverter(new object[] { value }));
                    }
                }
                return(res.ToArray());
            }