答案 0 :(得分:1)
有两种方式(很多方式,但我更喜欢这些)。
缓慢的方式:(非常慢)使用CodeDom在运行时编译字符串。样品:
using System.CodeDom.Compiler;
using Microsoft.CSharp;
//...
private static void Main()
{
string Tempreture = "20 > 13 && 20 < 18";
bool? result = Evaluate(Tempreture);
if (!result.HasValue)
{
throw new ApplicationException("invalid expression.");
}
else if (result.Value)
{
//...
}
else
{
//...
}
}
public static bool Evaluate(string condition)
{
// code to compile.
const string conditionCode = "namespace Condition {{public class Program{{public static bool Main(){{ return {0};}}}}}}";
// compile code.
var cr = new CSharpCodeProvider().CompileAssemblyFromSource(
new CompilerParameters { GenerateInMemory = true }, string.Format(conditionCode, condition));
if (cr.Errors.HasErrors) return null;
// get the method and invoke.
var method = cr.CompiledAssembly.GetType("Condition.Program").GetMethod("Main");
return (bool)method.Invoke(null, null);
}
快捷方式:使用Ncalc库动态解析表达式。
using NCalc;
// ...
string Tempreture = "20 > 13 && 20 < 18";
NCalc.Expression e = new Expression(Tempreture);
if (e.HasErrors())
{
throw new ApplicationException("invalid expression");
}
if ((bool)e.Evaluate())
{
//...
}
else
{
//...
}
答案 1 :(得分:0)
我假设x = 20
然后你可以这样做:
if(x > 13 && x <18)