You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Flee进行字符串字面量校验时遇变量识别错误问题

解决Flee字符串字面量被当作变量的问题

嘿,这个问题很典型——你写的表达式里,JWilly没有被当作字符串字面量处理,是因为Flee要求字符串必须用引号包裹,否则它会默认把无引号的标识符识别成变量名,而不是你要匹配的字符串值。

问题根源

你的表达式:

const string exp = @"(User.UserName = JWilly)";

这里的JWilly没有引号,Flee会尝试去查找名为JWilly的变量,但你根本没定义这个变量,所以运行时肯定会出错,或者得到不符合预期的结果。

修正方案

只需要给字符串字面量加上单引号(或者转义后的双引号)就行,两种写法都可以:

写法1:使用单引号(更简单,不需要转义)

var context = new ExpressionContext();
context.Variables.DefineVariable("User", typeof(User));
// 给JWilly加上单引号,标记为字符串字面量
const string exp = @"(User.UserName = 'JWilly')";
var expression = context.CompileDynamic(exp);

var user = new User { Id = 1, UserName = "JWilly", Active = false, };
context.Variables["User"] = user;
var result = expression.Evaluate();

写法2:使用转义双引号(适合习惯C#字符串写法的场景)

因为你用了@逐字字符串,所以双引号需要写两个来转义:

const string exp = @"(User.UserName = ""JWilly"")";

补充说明

Flee的表达式语法和C#类似,但在处理字符串时,必须显式用引号(单/双都可)标记字面量,这是为了区分变量名和字符串值。如果不加引号,解析器会把它当成一个需要求值的变量引用,自然就不符合你的预期啦。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:49:58