C#可以在String值中进行比较,返回布尔值。 例如。 “5 <10”返回true

有没有办法在字符串值中进行比较可以返回Boolean值。 例。 如果(5> 5000)显然会返回错误值。 但我想做的是让“5> 5000”返回假值。

例。

 string com = "5 > 10"; 

那么有没有办法让这个com变量返回一个false值,就像它是整数之间的比较一样。

没有内置的方式,但NCalc可以在这里提供帮助

 NCalc.Expression expr = new NCalc.Expression("5>10"); bool b = (bool)expr.Evaluate(); 

你甚至可以使用参数

 NCalc.Expression expr = new NCalc.Expression("a { if (name == "a") args.Result = 5; if (name == "b") args.Result = 10; }; bool b = (bool)expr.Evaluate(); 

没有内置的方法来做到这一点。

虽然有几种方法可以解决这个问题,但其中一种方法就是自己解析文本。 我在文章AC#Expression Evaluator中提供的代码中这样做了。 您可能想要查看该代码。

不,这不能直接完成。 您应该编写自己的类或扩展String类。 要处理诸如“5 <10”的字符串,您需要自己的方法。

您应该在字符串中搜索指示比较的符号,例如“<”,“==”等,然后将其拆分并执行比较。

基本上:自己动手是唯一的方法,但你可以尝试以优雅的方式做到这一点。

简答:不。

答案很长:随意解析字符串,寻找> <和=。 按空格分割,解析整数然后进行评估。 如果你想让它与括号一起工作可能会变得更难......

不是直接的,本身(缺少不安全的Javascript eval-execute-my-data hack),但您可以尝试自己解析它,具体取决于您想要接受的表达式的复杂程度。 例如,这应该与您拥有的字符串一起使用:

 var arr = com.Split('>').Select(x=>int.Parse(x.Trim())).ToArray(); return arr[0] > arr[1]; 

你也可以使用正则表达式来获得更复杂的(未经测试,但它应该工作):

 var r = new Regex(@"(\d+)\b*(<|>|=|<=|>=)\b*(\d+)") var match = r.Match(com); if(match.Success) { var a = int.Parse(match.Captures[0]); var b = int.Parse(match.Captures[2]); switch(match.Captures[1]) { case "<": return a < b; case "=": return a = b; case ">": return a > b; case "<=": return a <= b; case "<=": return a >= b; } } //uh-oh throw new ArgumentException("com"); 

考虑使用FLEE :

Flee是.NET框架的表达式解析器和评估器。 它允许您在运行时计算字符串表达式的值,例如sqrt(a ^ 2 + b ^ 2)。 它使用自定义编译器,强类型表达式语言和轻量级codegen将表达式直接编译为IL。 这意味着表达式评估非常快速和有效。 试试演示,它可以让你根据表情生成图像,并亲自看看。

使用FLEE,您可以使用以下内容轻松完成此操作:

  var con = new ExpressionContext(); const string com = @"5 > 5000"; var comparison = con.CompileDynamic(com); var result = comparison.Evaluate(); MessageBox.Show(result.ToString()); 

HTH …