c# - 在 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,来推断表达式中每个参数的预期类型并验证它?
解决方案
推荐阅读
- wordpress - 我想检索 wordpress 帖子中的所有图像(全部来自媒体库)并将它们显示在一个 lighbox
- ruby-on-rails - 找不到 ActiveRecord 适配器
- spyder - Spyder 中的 Keybpard 快捷方式可临时使单个窗格成为唯一窗格
- php - 如何在没有 API 的情况下测试客户端?
- excel - COUNTIFS - 单个单元格范围,在日期范围内并匹配字符串
- regex - 使用 REGEX PowerShell 在 '_-_' 之前和之后获取单词
- asp.net-core - 尝试使用 VS2019 添加 Razor 视图时如何修复代码生成错误
- python - 如何将额外的图像添加到 cifar10 数据集以在 keras 中学习?
- html - 如何将 CSV 中的书签读入 HTML 书签输入文件?
- ruby - 对“自我”的这种使用感到非常困惑;'参数.方法'