public IElement?Visit(ConditionalOptions options) { Type? objectType = null; string compareToString = string.Empty; if (options.CompareToTokens is ConcatValue concat) { objectType = typeof(string); compareToString = valueVisitor.Visit(concat); } else if (options.CompareToTokens is DataValue data) { objectType = data.DataType; compareToString = data.Value.ToString(); } string castedProperty = objectType == typeof(int) ? $"(int){options.Property}" : objectType == typeof(bool) ? $"(bool){options.Property}" : $"{options.Property}.ToString()"; string conditionString = $"(page, parent) => {castedProperty} {options.CompareTokens} {compareToString}"; var scriptOptions = ScriptOptions.Default.AddReferences(typeof(PageContext).Assembly).AddImports("System", "JLML.Contexts"); var condition = CSharpScript.EvaluateAsync <Func <PageContext, ElementContext, bool> >(conditionString, scriptOptions).GetAwaiter().GetResult(); if (condition(pageContext, options.Element.Current)) { return(options.Element); } return(null); }