如何使用 C# 泛型将这 3 种方法变成一种方法?

2023-12-28

我没有太多使用泛型,因此无法弄清楚是否可以使用泛型将以下三种方法变成一种方法以减少重复。实际上,我的代码当前有六个方法,但如果您可以解决这三个方法,那么其余的应该可以使用相同的解决方案来工作。

    private object EvaluateUInt64(UInt64 x, UInt64 y)
    {
        switch (Operation)
        {
            case BinaryOp.Add:
                return x + y;
            case BinaryOp.Subtract:
                return x - y;
            case BinaryOp.Multiply:
                return x * y;
            case BinaryOp.Divide:
                return x / y;
            case BinaryOp.Remainder:
                return x % y;
            default:
                throw new ApplicationException("error");
        }
    }

    private object EvaluateFloat(float x, float y)
    {
        switch(Operation)
        {
            case BinaryOp.Add:
                return x + y;
            case BinaryOp.Subtract:
                return x - y;
            case BinaryOp.Multiply:
                return x * y;
            case BinaryOp.Divide:
                return x / y;
            case BinaryOp.Remainder:
                return x % y;
            default:
                throw new ApplicationException("error");
        }
    }

    private object EvaluateDouble(double x, double y)
    {
        switch (Operation)
        {
            case BinaryOp.Add:
                return x + y;
            case BinaryOp.Subtract:
                return x - y;
            case BinaryOp.Multiply:
                return x * y;
            case BinaryOp.Divide:
                return x / y;
            case BinaryOp.Remainder:
                return x % y;
            default:
                throw new ApplicationException("error");
        }
    }

我正在构建一个简单的表达式解析器,然后需要评估简单的二进制运算,例如加法/减法等。我使用上述方法来获取使用相关类型执行的实际数学运算。但必须有一个更好的答案!


泛型本身不支持算术。但是,可以使用 .NET 3.5 来完成,like so http://www.pobox.com/~skeet/csharp/miscutil/usage/genericoperators.html。 Operator 类是以下的一部分MiscUtil http://www.yoda.arachsys.com/csharp/miscutil/。这然后变成:

   public T Evaluate<T>(T x, T y) {
      switch (Operation)
      {
        case BinaryOp.Add:
            return Operator.Add(x, y);
        case BinaryOp.Subtract:
            return Operator.Subtract(x, y);
     ... etc

由于您正在编写表达式解析器,因此直接使用 Expression 可能是一个好主意,但欢迎您使用上面的内容。

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

如何使用 C# 泛型将这 3 种方法变成一种方法? 的相关文章

  • 如何验证文件名称在 Windows 中是否有效?

    是否有一个 Windows API 函数可以将字符串值传递给该函数 该函数将返回一个指示文件名是否有效的值 我需要验证文件名是否有效 并且我正在寻找一种简单的方法来完成此操作 而无需重新发明轮子 我正在直接使用 C 但针对的是 Win32
  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • window.location.href 在 IE 11 中不起作用

    我正在使用 Jquery Ajax 作为登录表单 ajax 成功后 我使用重定向页面window location href test php 这在 Chrome firefox 和 IE9 中工作正常 但在 IE 11 中 它不起作用 我
  • Jetpack compose NavHost 防止重组屏幕

    正如你所看到的 这就是我使用 MaterialBottomNavigation 实现 NavHost 的方式 我在两者上都有很多项目Messages and Feeds屏幕 当我在两个屏幕之间导航时 它们会自动重新组合 但我不想因为那里有太
  • Bootstrap 跨度和列之间有什么区别

    我使用引导程序 但试图理解跨度和列之间的区别 example div class span4 div or div class col md 4 div 他们之间有什么区别或者他们做同样的事情 div class span4 div 是旧的
  • session_start() 有关非法字符、空会话 ID 和失败会话的问题

    所以 我意识到这是一个重复的问题然而 这显然是一个错误 而这篇文章的原始帖子已经有 5 年历史了 但也有人说这是一次恶意攻击 会话 ID 太长或包含非法字符 有效字符为 a z A Z 0 9 和 https stackoverflow c
  • DotNet 核心设置失败

    在我的 Windows 10 笔记本电脑上安装 DotNet Core 时 DotNetCore 1 0 0 RC2 VS2015Tools Preview1 运行时包安装失败 我从安装日志文件中发现了一些错误信息 网络开发工具信息 037
  • 为什么kafka集群中的单节点多broker不是首选?

    我正在尝试将卡夫卡实施到生产中 想知道为什么单节点 多代理的 kafka 实例不是首选 很少有人建议 如果在单个节点上使用多个代理 则应该为它们分配单独的磁盘空间 但这样做的原因尚不清楚 有人可以解释一下单个代理与多个代理 kafka 实例
  • libjpeg 和 .Net jpeg 编解码器在单色数据上真的有很大差异吗?

    我处理大量单色图像数据 今天早上我注意到 libjpeg 和 Net jpeg 编解码器处理单色数据的方式似乎存在显着差异 看起来使用 libjpeg 以任何质量设置保存并使用默认 Net jpeg 编解码器打开的单色图像实际上仅加载 16
  • 两个相同的字符串可以是 C# 中的两个单独的实例吗?

    在 C 中 字符串是驻留的 也就是说 如果我创建字符串foobar当第二次使用它时 C 在内存中只会有一个字符串实例 虽然我有两个引用 但它们都将指向同一个字符串实例 这就是 C 中字符串必须不可变的原因之一 现在 我的问题是 是否有可能以
  • 是否有与 System.Windows.Forms.Screen 等效的 WPF?

    我正在尝试创建一个包含整个桌面工作区域的 WPF 窗口 在 WinForms 中 我将通过获取所有边界的并集来做到这一点System Windows Forms Screen AllScreens 是否有等效类型或其他机制来获取 WPF 中
  • 如何立即取消卷曲操作?

    我在用着libcurl http curl haxx se libcurl 在 C 中 我正在调用curl easy perform在与我的用户界面分开的线程中使用增强线程 http www boost org doc libs 1 43
  • 如何打印矩阵的所有列

    我有一个Matrix总共包含 5 列 我想要做的是打印所有列Matrix不仅仅是前 2 个 如下所示 val V Matrix svd V The V factor is a local dense matrix println V 给出以
  • iOS 为什么将工具栏间隙移至键盘

    我想出了如何使用出现的键盘移动带有按钮和文本字段的工具栏 void liftMainViewWhenKeybordAppears NSNotification aNotification NSDictionary userInfo aNot
  • 分布式源代码控制 - 推送单个变更集

    正在解决一个棘手的问题 希望得到社区的一些帮助 基本上 我们的开发团队分为两个团队 比如说 红色 和 蓝色 3 repos 1 大师2 红色 gt gt 大师的克隆3 蓝色 gt gt 大师的克隆 每个开发人员都在他们工作的本地计算机上克隆
  • 获取 GNU makefile 中最后一个单词之前的单词

    我需要从最后一个之前提取单词 MAKEFILE LIST 到目前为止 我想不出比这种怪物更好的东西了 LIST a b c LAST WORD INDEX words LIST BEFORE LAST word shell echo LAS
  • 删除部分文本文件 C++

    我有一个名为 copynumbers txt 的文本文件 我需要在使用时删除数字后面的一些数字示例将是一个包含以下内容的文本文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 每个整数应占用 4 个字节空间 我想删
  • 如何修改定义的函数来计算想要的输出(Pandas)

    我试图通过在以下条件下对 name val id 和 fac id 列进行三重循环来计算以下 new field 列 1 在每个 val id 循环中 如果 product CL 则 val against 和 our val amt 的最
  • dig 和 nslookup 的共享库

    我在用centos 6 4 在进行 dig 或 nslookup 时 出现以下错误 挖掘 google com dig error while loading shared libraries libcrypto so 4 cannot o
  • PyQt5:使用 QtDesigner,如何将信号与模块中定义的插槽/可调用连接

    我是 PyQt5 的初学者 请原谅我的无知我正在尝试将按钮与我定义的功能连接起来 import sys from PyQt5 import QtGui QtWidgets uic def PrintSomething print Hello
  • 子模块内的 Git 子模块(嵌套子模块)

    git 子模块是否可以由其他几个 git 子模块组成 并且超级 git 存储库可以获取每个子模块的内容 我尝试使用创建包含多个子模块的 git 存储库的明显 天真的方法来做到这一点 然后将此 git repo 添加到另一个 git repo
  • 如何使用 C# 泛型将这 3 种方法变成一种方法?

    我没有太多使用泛型 因此无法弄清楚是否可以使用泛型将以下三种方法变成一种方法以减少重复 实际上 我的代码当前有六个方法 但如果您可以解决这三个方法 那么其余的应该可以使用相同的解决方案来工作 private object EvaluateU