| using System.Collections.Generic; | 
 | using System.Linq; | 
 | using OfficeOpenXml.FormulaParsing.Excel.Functions; | 
 | using OfficeOpenXml.FormulaParsing.Exceptions; | 
 | using OfficeOpenXml.FormulaParsing.Utilities; | 
 |  | 
 | namespace OfficeOpenXml.FormulaParsing.ExpressionGraph.FunctionCompilers; | 
 |  | 
 | public class IfErrorFunctionCompiler : FunctionCompiler { | 
 |   public IfErrorFunctionCompiler(ExcelFunction function) | 
 |       : base(function) { | 
 |     Require.That(function).Named("function").IsNotNull(); | 
 |   } | 
 |  | 
 |   public override CompileResult Compile(IEnumerable<Expression> children, ParsingContext context) { | 
 |     if (children.Count() != 2) { | 
 |       throw new ExcelErrorValueException(eErrorType.Value); | 
 |     } | 
 |     var args = new List<FunctionArgument>(); | 
 |     Function.BeforeInvoke(context); | 
 |     var firstChild = children.First(); | 
 |     var lastChild = children.ElementAt(1); | 
 |     try { | 
 |       var result = firstChild.Compile(); | 
 |       if (result.DataType == DataType.ExcelError) { | 
 |         args.Add(new(lastChild.Compile().Result)); | 
 |       } else { | 
 |         args.Add(new(result.Result)); | 
 |       } | 
 |     } catch (ExcelErrorValueException) { | 
 |       args.Add(new(lastChild.Compile().Result)); | 
 |     } | 
 |     return Function.Execute(args, context); | 
 |   } | 
 | } |