1

我正在使用 NCalc.Expression 来评估一个条件,该条件涉及与其中包含单引号的字符串值进行比较。在 NCalc 中,字符串使用单引号而不是双引号来表示。

前任:

[variable1]=='Sample's Data'

为了逃避单引号,我尝试添加这样的反冲 -

[variable1]=='Sample\'s Data'

但是当它被分配给一个字符串变量时,它会将反斜杠删除为 -

[variable1]=='Sample's Data'

并且在将其分配给 Expression 构造函数之后,在无法识别第二个单引号“s Data”之后评估该文本时,它会引发错误。

当我尝试如下附加两个反斜杠时 -

[variable1]=='Sample\\'s Data',

这被分配给一个字符串变量

"[variable1]=='Sample\'s Data'"

但评估它不会抛出异常,但比较失败,因为数据是

"[variable1]=='Sample's Data'"

没有反斜杠。

我该如何解决这个问题?

4

2 回答 2

1

一种可能的方法是使用 U+0027 的 Unicode'代码

var e = new Expression(@"'Sample\u0027s Data'");
var evaluated = e.Evaluate();

资源

或者简单地说:

var e = new Expression(@"'Sample\'s Data'");
var evaluated = e.Evaluate();

没有逐字字符串:

var e = new Expression("'Sample\\'s Data'");
var evaluated = e.Evaluate();

这给出了true

var e = new Expression("variable=='Sample\\'s Data'");
e.Parameters["variable"] = "Sample's Data";
var evaluated = e.Evaluate();
于 2016-03-07T21:50:32.267 回答
0

根据维基https://ncalc.codeplex.com/wikipage?title=values&referringTitle=Home#strings

您可以使用 \\、\'、\n、\r、\t 转义特殊字符。

于 2016-05-18T14:45:18.410 回答