将对象比较为字符串无效

时间:2016-12-01 06:31:13

标签: c# flee

我使用Flee库来评估用户输入的表达式。我使用的是表达式不编译以警告用户输入无效的事实。

如果我使用像var ==&#34这样的表达式"如果var是int,它将不会编译,因为这不是有效的代码。

但是如果var是自定义类的一个对象,我会编译它(因为我猜对象有一个ToString方法)。如果将包含在其中的变量与字符串进行比较,如何防止自定义类的表达式编译?

更新:这是一段显示问题的示例代码。尝试使用以下消息进行编译时,filter1将抛出错误:

Ciloci.Flee.ExpressionCompileException:CompareElement:Operation' Equal'未定义类型' Int32'和'字符串'

但是使用自定义类作为变量类型而不是整数的第二个过滤器不会产生异常。但我希望该自定义类的行为与int类似,并且没有定义Equal操作。怎么做?

using System;
using Ciloci.Flee;

namespace FleeTest
{
    class VariableClass
    {
        // TODO
    }

    class Program
    {
        public static void Main(string[] args)
        {
            ExpressionContext context = new ExpressionContext();
            context.Options.ResultType = typeof(bool);

            VariableCollection var = context.Variables;
            var.ResolveVariableType += var_ResolveVariableType;

            string filter1 = "varInt=\"something\"";
            string filter2 = "varClass=\"something\"";

            try
            {
                IDynamicExpression e = context.CompileDynamic(filter1); 
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }

            try
            {
                IDynamicExpression e = context.CompileDynamic(filter2); 
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }

        }

        static void var_ResolveVariableType(object sender, ResolveVariableTypeEventArgs e)
        {
            if(e.VariableName == "varInt")
            {
                e.VariableType = typeof(int);
            }
            else if(e.VariableName == "varClass")
            {
                e.VariableType = typeof(VariableClass);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

也许会尝试将您的var转换为:

for aSubView: Any in self.view.subviews {
if (aSubView is UITextField) {
    var textField = (aSubView as! UITextField)
    textField. setBottomBorder()
}
}     

我希望这是你的问题和它的帮助。 再见:)