在 .NET 中将复杂的布尔条件从字符串转换为布尔值

2023-12-26

我需要将复杂的表达式从字符串解析为布尔值。

它只能包含:
* 布尔值(真/假),
* 括号,
* AND/OR 操作数(&&、||)

Eg:

bool.Parse("((true || false) && (false || false)) || (true || false)"

知道如何实现这一目标吗?


这是一个狡猾的评估器类,它为您提供 C# 代码中的 JScript.NET Eval 函数:

static public class Evaluator
{
    private const string _jscriptSource =
        @"package Evaluator
        {
           class Evaluator
           {
              public function Eval(expr : String) : String 
              { 
                 return eval(expr); 
              }
           }
        }";

    static private object _evaluator;
    static private Type _evaluatorType;

    [SuppressMessage("Microsoft.Performance", "CA1810:InitializeReferenceTypeStaticFieldsInline",
        Justification = "Can't be done inline - too complex")]
    static Evaluator()
    {
        InstantiateInternalEvaluator();
    }

    static private void InstantiateInternalEvaluator()
    {
        JScriptCodeProvider compiler = new JScriptCodeProvider();

        CompilerParameters parameters;
        parameters = new CompilerParameters();
        parameters.GenerateInMemory = true;

        CompilerResults results;
        results = compiler.CompileAssemblyFromSource(parameters, _jscriptSource);

        Assembly assembly = results.CompiledAssembly;
        _evaluatorType = assembly.GetType("Evaluator.Evaluator");

        _evaluator = Activator.CreateInstance(_evaluatorType);
    }

    static public int EvaluateToInteger(string statement)
    {
        string s = EvaluateToString(statement);
        return int.Parse(s);
    }

    static public double EvaluateToDouble(string statement)
    {
        string s = EvaluateToString(statement);
        return double.Parse(s);
    }

    static public decimal ForceEvaluateToDecimal(string statement)
    {
        decimal result;
        bool s = Decimal.TryParse(statement, out result);
        return result;
    }

    static public decimal EvaluateToDecimal(string statement)
    {
        string s = EvaluateToString(statement);
        return decimal.Parse(s);
    }

    static public string EvaluateToString(string statement)
    {
        object o = EvaluateToObject(statement);
        return o.ToString();
    }

    static public bool EvaluateToBool(string statement)
    {
        object o = EvaluateToObject(statement);
        return (bool)o;
    }

    static public object EvaluateToObject(string statement)
    {
        try
        {
            return _evaluatorType.InvokeMember(
                "Eval",
                BindingFlags.InvokeMethod,
                null,
                _evaluator,
                new object[] {statement}
                );
        }
        catch (Exception)
        {
            InstantiateInternalEvaluator();
            return null;
        }
    }
}

然后您只需调用 Evaluator.EvaluateToBool(string)。从现有项目中提取,因此您可能需要进行调整!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 .NET 中将复杂的布尔条件从字符串转换为布尔值 的相关文章

  • 正则表达式不等于字符串

    我用正则表达式用头撞墙 我正在尝试定义一个表达式 该表达式完全排除此文本 System 不区分大小写 但可以包含 系统 这个词提供的不仅仅是这个 例子 系统 无效 系统 无效 系统 无效 系统 无效 asd 系统 有效 asd 系统 asd
  • 如何动态加载包含非托管代码的原始程序集?(绕过“无法验证的代码失败策略检查”异常)

    我将举一个使用的例子系统 Data SQLite DLL http sqlite phxsoftware com 这是一个包含非托管代码的混合程序集 如果我执行这个 var assembly Assembly LoadFrom System
  • MySql 最后插入 ID,连接器 .net

    我正在使用 MySql Connector net 我需要获取最后一个查询生成的插入 id 现在 我假设返回值是MySqlHelper ExecuteNonQuery应该是最后一个插入id 但它只返回1 我正在使用的代码是 int inse
  • Confuser .NET 混淆器。安全吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在开发一个应用程序 其中阻止用户反编译代码非常重要 现在 我意识到 如果由经验丰富的程序员执行 大多数 exe 都是可反编译的
  • C++:初始化静态字符串成员

    我在 C 中初始化静态字符串成员时遇到一些问题 我有几个类 每个类都包含几个表示 id 的静态字符串成员 当我通过调用静态函数初始化变量时 一切都很好 但是 当我想为一个变量分配另一个变量的值时 它仍然保留空字符串 这段代码有什么问题 st
  • 实用程序库中应包含哪些内容[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 随着我的项目越来越多 我发现我经常从一个项目到另一个项目 从一个客户到另一个客户重复许多常见的任务 因此 我开始组装一个 实用程序 库 这是这些
  • 该组件没有由 uri 标识的资源

    我想创建一个通用数据网格以在我的所有视图 用户控件上使用 这是我的结构 Class Library called Core Class called ViewBase public class ViewBase UserControl pu
  • Sitecore - 隐藏功能区中的按钮

    我为特定内容项创建了上下文功能区 我有两个按钮 可以将项目 升级 或 降级 到某一类别 该部分只能有一个 是否可以根据某种隐藏代码中的内容状态隐藏其中一个按钮 我了解如何链接到 Click 事件 但我想知道是否有某种加载事件可供自定义功能区
  • 无法在“System.String”类型上的多个长度相等的构造函数之间进行选择

    尝试解析类型时出现以下错误 无法在 System String 类型上的多个长度相等的构造函数之间进行选择 注册组件时 使用UsingConstructor 配置方法显式选择构造函数 该类型有 1 个构造函数 该构造函数采用IReposit
  • SimpleDateFormat.parse() 忽略模式中的字符数

    我正在尝试解析一个可以具有不同格式的日期字符串 尽管字符串不应与第二个模式匹配 但它却以某种方式匹配 因此返回错误的日期 这是我的代码 import java text ParseException import java text Sim
  • gcc 没有小字符串优化吗?

    Most std string实现 包括 GCC 使用小字符串优化 例如 有一个answer https stackoverflow com a 21710033 2640636讨论这个 今天 我决定检查我编译的代码中的字符串在什么时候被移
  • 如何正确转义mysql?

    我刚刚发现如果我写 select from tbl where name like foo 然后添加 foo 作为参数及其值 a 用户数据 它不会正确转义 我勒个去 它想要 a 即使我使用参数 我还是忍不住觉得我对 sql 注入持开放态度
  • 使用实体框架重叠约会

    我将 asp net mvc 与实体框架一起使用 我有一个包含 startat 字段 endat 字段和 roomid 字段 称为 SpaceConfigurationId 的约会列表 并且希望查找给定房间已重复预订的约会列表 可以假设 e
  • 当我使用 Image.FromFile() 时 FileNotFound

    我在这种情况下使用 Image FromFile string 方法 using System using System Collections Generic using System ComponentModel using Syste
  • 如何等待远程 .NET 调试器连接

    今天我遇到了一个问题 我需要远程调试程序 该程序是从另一个系统启动的 所以我真的没有机会在命令行上与它交互 不过我可以很容易地改变它的来源 我需要做的是让程序正常启动 然后等待我用调试器附加到它 我想不出一个让我快乐的方法 我确实发现了这个
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 引用的程序集自动由 Visual Studio 替换

    我有 2 个项目 一个可移植类库和一个常规单元测试项目 在可移植类库中 我使用 NuGet 来引用 Microsoft BCL 可移植包 它附带 2 个程序集 System Threading Tasks dll and System Ru
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li

随机推荐

  • 我可以使用比树更快的数据结构吗?

    我有一个二元决策树 它将输入作为浮点数组 每个分支节点根据输入索引和值进行分割 最终将我带到叶子 我正在这棵树上执行大量查找 根据性能分析 执行时间约为 17 编辑 优化了其他区域 现在几乎为 40 我想知道我是否可以 应该使用不同的数据结
  • 使用 Entry().CurrentValues.SetValues() 不会更新集合

    我以前没有遇到过这种情况 因为我通常自行处理集合 而不是直接在实体上修改它们 public class Schedule BaseEntity public Guid Id get set public virtual int DayOfT
  • Adobe AIR - 保存本地数据

    我想将变量保存到加密本地存储 这个例子是有效的 但是我如何扩展它以保存超过 1 个变量 To save variable to ELS EncryptedLocalStore function saveItems var m1 String
  • 如何使用 Agda 的分隔延续实现?

    我们可以很容易地在 Agda 中实现定界延续 monad 然而 没有必要 因为 Agda 标准库 已经定界延续单子的实现 http www cse chalmers se nad listings lib 0 7 Category Mona
  • Bootstrap 3 具有多个项目的轮播

    I have implemented a multiple item carousel using Bootstrap3 as shown in this demo http www bootply com 132400 It displa
  • 选择 Redis MaxMemory 大小和 BGSAVE 内存使用情况

    我试图找出在以下情况下 maxmemory 的安全设置 写密集型应用程序 8GB RAM 假设其他进程占用大约 1GB 这意味着redis进程的内存使用量永远不会超过7GB 每个 BGSAVE 事件的内存使用量都会加倍 因为 在redis中
  • 悄悄更新正在进行的通知

    我有一项可以无线连接到其他设备的服务 启用该服务后 我会收到一条持续通知 表明该服务已启用 启用服务后 用户即可连接到另一台设备 此时 我想更新正在进行的通知以说明已连接的设备的名称 这很容易通过调用来完成startForeground O
  • 并发链表

    我正在尝试用 C 设计一个允许并发访问的链表 显然 对该列表使用单个锁的效率非常低 因为不相交的区域可能会并行更新 现在除了为每个节点存储一个锁之外我还有什么选择 另外 在这种情况下 非阻塞版本会是更好的选择吗 有相关链接吗 EDIT 谢谢
  • 非常短的 jQuery 图像幻灯片

    我正在寻找使用 jQuery 创建淡入淡出图像幻灯片的最短方法 我在谷歌上找到的例子总是有很多不必要的特殊内容 我很难理解它们 幻灯片需要投射到现有图像上 img src myImage jpg 使用以下图像 imgArray img1 j
  • Spring mvc @RequestBody如何使用@EmbeddedId解析JPA实体

    我有 2 个实体 User 和 UserAlias 用户有复合PK 我有一些疑问 如何在 Spring MVC 控制器中解析 JSON 以填充 User 和 UserPK 对象 例如使用以下数据 id 1 名称 新用户 别名 别名1 别名2
  • Qt Creator 找不到标头(显示:“没有这样的文件或目录”)

    我如何告诉 Qt Creator 2 4 1 基于 Qt 4 7 4 32 位 在哪里查看默认情况下对于头文件 当我在 Qt Creator 中打开一个 C 文件并说 include
  • 是否可以使用 JPA 和 hibernate 扫描 jar 文件中的实体

    我有以下情况 项目 A 包含几个实体并且是独立的 项目 B 包含几个实体并且是独立的 项目 C 包含很少的实体 并且依赖于项目 A 和项目 B 我正在使用 Maven 来管理依赖项和构建 当我尝试测试项目 A 和项目 B 时 一切进展顺利
  • Android 在视图内启动应用程序

    好吧 我有一个应用程序 我想使用其他应用程序 例如 我有一个应用程序 除了目录查找之外 它可以执行很多操作 因为已经有一个应用程序可以为我的学校执行此操作 我知道我可以有意图地启动应用程序 但这也会使它们远离我的应用程序的导航菜单 无论如何
  • 将纬度/经度转换为城市名称? (反向地理定位)

    我正在 Codeigniter PHP jQuery 中创建一个工作委员会 雇主可以在其中输入他们的位置 我们使用 Google 地图 API 来绘制它 虽然这已经产生了很棒的可用性结果 但问题是 当我们尝试向求职者显示这些位置时 他们会感
  • WPF 如何存储语言字典?

    根据https msdn microsoft com en us library system windows controls spellcheck v vs 110 aspx https msdn microsoft com en us
  • Python Pandas 跨列累积和并在另一个新列中获取结果

    我有包含 col1 col10 的数据框 我想计算跨列的累积总和并动态创建新列 即 cum col1 cum col10 我研究了 cumsum 但这给出了最终的累积和 如何在创建新列时实现累积总和 数据框看起来像 id col1 col2
  • imagecreatefrompng 根本不起作用

    我已经用 mime 类型检查了文件 如果是 jpg 或 gif 则可以完美使用 src imagecreatefromjpeg tmpName and src imagecreatefromgif tmpName 但如果图像是png src
  • 重复单词的正则表达式

    我是正则表达式新手 我不太清楚如何编写一个正则表达式来 匹配 任何重复的连续单词 例如 巴黎在the the spring Not 那个那个相关的 你笑什么 是my my正则表达式那么糟糕 是否有一个正则表达式可以匹配上面所有的粗体字符串
  • 使用 Notepad++ 通过 FTP 连接到服务器

    我正在使用 Notepad 6 5 3 版本 来编辑我的文件 我想使用 Notepad 连接到我的服务器 我使用这个方法 打开 Notepad gt 插件 gt NppFTP gt 显示 NppFTP 窗口 在 NppFTP 窗口中 Cli
  • 在 .NET 中将复杂的布尔条件从字符串转换为布尔值

    我需要将复杂的表达式从字符串解析为布尔值 它只能包含 布尔值 真 假 括号 AND OR 操作数 Eg bool Parse true false false false true false 知道如何实现这一目标吗 这是一个狡猾的评估器类