我正在使用 Roslyn 的功能将“表达式”创建为字符串,这些字符串是带有占位符的代码片段。在运行时,引擎将占位符替换为它们的值并计算表达式。例如,一个表达式看起来像
From =="someEmail@something.com" && SentDate > "12-Nov-2017"
这里的单词“From”和“SentDate”是占位符,在运行时被替换为值。这就是代码的样子
public class Globals
{
public string From { get; set; }
public string To { get; set; }
public string SentDate { get; set; }
}
void RunCode()
{
if (code == null)
{
code = CSharpScript.Create<bool>(@"From =="someEmail@something.com" && SentDate > "12-Nov-2017"", ScriptOptions.Default.WithImports("System", "System.IO"), globalsType: typeof(Globals));
code.Compile();
}
object s = code.RunAsync(new Globals() { From = "someEmail@something.com", SentDate = "12-Nov-2017"}).Result.ReturnValue;
MessageBox.Show(s.ToString());
}
一切都按预期工作。
现在我想更进一步,将 && 和 == 等运算符替换为人类可读的对应词,如 AND 和 EqualsTo。所以基本上表达式应该变成
From EqualsTo "someEmail@something.com" AND SentDate > "12-Nov-2017"
然后以某种方式在调用中CSharp.Create
我想用 && 和 EqualsTo 替换 AND ==
有没有办法做到这一点?这基本上是为了允许用户使用自然语言自由地创建这样的表达式,然后可以将其输入到评估引擎中。