/// <inheritdoc /> public CompiledExpression Compile() { var left = LeftExpression.Compile(); var right = RightExpression?.Compile(); var operatorFormatterName = "op_" + Operator.OperatorType; return(async(contextObject, scopeData) => { var leftValue = await left(contextObject, scopeData); var arguments = right != null ? new FormatterArgumentType[] { new FormatterArgumentType(0, null, (await right(contextObject, scopeData)).Value), } : new FormatterArgumentType[0]; if (Cache == null) { Cache = leftValue.PrepareFormatterCall( leftValue.Value?.GetType() ?? typeof(object), operatorFormatterName, arguments, scopeData); } if (Cache != null /*&& !Equals(Cache.Value, default(FormatterCache))*/) { return scopeData.ParserOptions.CreateContextObject(".", await scopeData.ParserOptions.Formatters.Execute(Cache, leftValue.Value, scopeData.ParserOptions, arguments), contextObject.Parent); } return scopeData.ParserOptions.CreateContextObject(".", null, contextObject.Parent); }); }