首页 > 解决方案 > 在 C# 中编写为字符串的逻辑二进制表达式的参数类型检查?

问题描述

想象一个场景,您希望允许用户使用一组定义良好的参数为应用程序提供逻辑二进制表达式作为字符串。例如:

"isSuperAdmin || userLevel > 5 && isAdmin"

系统正在使用 NReco 的 Lambda Parser 通过尝试解析来验证表达式:

Expression exp = lambdaParser.Parse("isSuperAdmin || userLevel > 5 && isAdmin");

如果表达式的结构有效,则上面返回一个表达式,否则抛出。但它不能对参数应用任何类型检查,例如 isAdmin 必须是布尔值,但如果用户构造了以下内容怎么办:

    "isSuperAdmin || userLevel > 5 && isAdmin > 33"

这个表达式在语法上是正确的并且可以被解析,但是因为 isAdmin 是一个布尔值,而不是一个整数,所以它不会被正确地计算。有没有一种方法,不一定使用 NReco.LambdaParser,来推断表达式中每个参数的预期类型并验证它?

标签: c#linq-expressionsnreco

解决方案


推荐阅读