我想做相当于:
object result = Eval("1 + 3");
string now = Eval("System.DateTime.Now().ToString()") as string
Run Code Online (Sandbox Code Playgroud)
在Biri的链接之后,我得到了这个片段(修改后删除了过时的方法ICodeCompiler.CreateCompiler():
private object Eval(string sExpression)
{
CSharpCodeProvider c = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("system.dll");
cp.CompilerOptions = "/t:library";
cp.GenerateInMemory = true;
StringBuilder sb = new StringBuilder("");
sb.Append("using System;\n");
sb.Append("namespace CSCodeEvaler{ \n");
sb.Append("public class CSCodeEvaler{ \n");
sb.Append("public object EvalCode(){\n");
sb.Append("return " + sExpression + "; \n");
sb.Append("} \n");
sb.Append("} \n");
sb.Append("}\n");
CompilerResults cr = c.CompileAssemblyFromSource(cp, sb.ToString());
if (cr.Errors.Count > 0)
{
throw …Run Code Online (Sandbox Code Playgroud) 我想将字符串表达式转换为真正的布尔表达式.
下面的表达式将是一个输入(字符串):
"(!A && B && C) || (A && !B && C) || (A && B && !C) || (A && B && C)"
Run Code Online (Sandbox Code Playgroud)
变量A,B和C将具有您的布尔值(true或false).
我如何转换字符串表达式,替换逻辑值并使用C#进行验证?
我有一串来自客户端的参数.一个例子可能是:
串PARAM = "(AND NAME.FULLNAME DOB.OPTIONAL)OR(ID和DOB.REQUIRED)OR(ID和国家)"
现在,我已经解析了所有传入的数据,并且具有代表每个参数的布尔值.
喜欢 :
bool name_FullName = true;
bool dob_Optional = false;
Run Code Online (Sandbox Code Playgroud)
等等
我正在尝试找到将客户参数表达式评估为True或False的最佳方法.
我想只是用他们的真/假bool替换参数.然后找到任何TRUE AND TRUE并删除它们,并替换TRUE AND FALSE为false.然后评估OR我离开的表达式.
输入后,这似乎是一个很好的方法.有没有人有我错过的更快的解决方案?