コード例 #1
0
ファイル: OptionVisitor.cs プロジェクト: Mr9Madness/JLML
        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);
        }