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

在C#中如何将含AND、OR的条件字符串转换为可执行条件语句?

C# 动态解析字符串条件逻辑实现方向指引

以下是几种可行的实现方向,可根据你的业务场景复杂度、安全要求选择:

  • 原生表达式树方案
    先对数据库取出的条件字符串做预处理:将AND替换为&&、OR替换为||,处理转义字符完成表达式标准化。之后通过C#原生的Expression类构建表达式树,将SomeString作为输入参数,允许的字符串操作(如Contains/StartsWith等)作为可调用方法,最终编译为Func<string, bool>类型的委托,直接传入运行时的实际字符串即可得到判断结果。该方案无需第三方依赖,且可通过限制允许调用的方法完全规避代码注入风险,适合条件逻辑规则可控的场景。
  • Roslyn 动态编译方案
    基于微软官方的Roslyn编译器平台的脚本API,将预处理后的条件表达式拼接为完整的C#方法代码,例如:
    bool Check(string SomeString) => ((SomeString.Contains("XYZ") && SomeString.Contains("VBN")) || SomeString.Contains("ABC"));
    
    调用Roslyn接口动态编译该代码为可执行委托即可调用。该方案灵活性最高,支持任意合法的C#条件逻辑,适合条件逻辑复杂度极高的场景,使用时需做好输入校验,限制允许执行的操作范围,避免恶意代码注入。
  • 开源规则引擎方案
    直接使用成熟的开源规则引擎类库,例如微软开源的RulesEngine,你只需将数据库存储的条件表达式适配为规则引擎支持的格式,即可直接利用引擎的动态解析能力完成条件判断,无需自行实现表达式解析逻辑,开发成本低,适合业务规则迭代频繁的场景。
  • 自定义解析器方案
    如果你的条件逻辑语法固定、复杂度可控,也可以自行实现轻量的词法、语法解析器,将字符串条件解析为自定义的语法树节点,再遍历节点执行判断。该方案完全可控,无额外依赖,也不存在代码注入风险,仅适合逻辑规则简单且固定的场景。

注意:所有动态执行输入逻辑的方案都需做好输入校验,严格限制可执行的操作范围,避免恶意构造的条件字符串引发安全问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:24:02