/// <summary> /// Construct an <see cref="ExpressionTemplate"/>. /// </summary> /// <param name="template">The template text.</param> /// <param name="result">The parsed template, if successful.</param> /// <param name="error">A description of the error, if unsuccessful.</param> /// <returns><c langword="true">true</c> if the template was well-formed.</returns> public static bool TryParse( string template, [MaybeNullWhen(false)] out ExpressionTemplate result, [MaybeNullWhen(true)] out string error) { if (template == null) { throw new ArgumentNullException(nameof(template)); } return(TryParse(template, null, null, out result, out error)); }
/// <summary> /// Construct an <see cref="ExpressionTemplate"/>. /// </summary> /// <param name="template">The template text.</param> /// <param name="formatProvider">Optionally, an <see cref="IFormatProvider"/> to use when formatting /// embedded values.</param> /// <param name="result">The parsed template, if successful.</param> /// <param name="error">A description of the error, if unsuccessful.</param> /// <param name="nameResolver">Optionally, a <see cref="NameResolver"/> /// with which to resolve function names that appear in the template.</param> /// <returns><c langword="true">true</c> if the template was well-formed.</returns> public static bool TryParse( string template, IFormatProvider?formatProvider, NameResolver?nameResolver, [MaybeNullWhen(false)] out ExpressionTemplate result, [MaybeNullWhen(true)] out string error) { if (template == null) { throw new ArgumentNullException(nameof(template)); } if (!TemplateParser.TryParse(template, out var parsed, out error)) { result = null; return(false); } result = new ExpressionTemplate(TemplateCompiler.Compile(parsed, DefaultFunctionNameResolver.Build(nameResolver)), formatProvider); return(true); }