C# 枚举标志比较

2024-01-17

给定以下标志,

  [Flags]
    public enum Operations
    {
        add = 1,
        subtract = 2,
        multiply = 4,
        divide = 8,
        eval = 16,
    }

如何实现 IF 条件来执行每个操作?在我的尝试中,第一个条件适用于添加、评估, 哪个是对的。然而第一个条件也适用于减法、求值,这是不正确的。

        public double Evaluate(double input)
    {
        if ((operation & (Operations.add & Operations.eval)) == (Operations.add & Operations.eval))
            currentResult += input;
        else if ((operation & (Operations.subtract & Operations.eval)) == (Operations.subtract & Operations.eval))
            currentResult -= input;
        else
            currentResult = input;

        operation = null;

        return currentResult;
    }

我看不出问题是什么。


改变你的内在& to |:

if ((operation & (Operations.add | Operations.eval)) == (Operations.add | Operations.eval))

这相当于:

if( ((operation & Operations.add)==Operations.add) &&
    ((operation & Operations.eval)==Operations.eval))

这可能更具可读性。您可能还想考虑这样的扩展:

public static bool HasFlag(this Operations op, Operations checkflag)
{
    return (op & checkflag)==checkflag;
}

那么你可以这样做:

if(operation.HasFlag(Operations.add) && Operations.HasFlag(Operations.eval))

这可能更具可读性。最后,您可以创建这个扩展以获得更多乐趣:

public static bool HasAllFlags(this Operations op, params Operations[] checkflags)
{
    foreach(Operations checkflag in checkflags)
    {
        if((op & checkflag)!=checkflag)
            return false;
    }
    return true;
}

那么你的表情可能会变成:

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

C# 枚举标志比较 的相关文章

随机推荐

  • 如何打开文件而不将其保存到磁盘

    我的问题 如何打开文件 在文件的系统默认 外部 程序中 而不将文件保存到磁盘 我的情况 我的资源中有文件 我想显示这些文件而不先将它们保存到磁盘 例如 我有一个xml文件 我想在用户机器上的默认程序中打开它进行阅读xml文件而不先将其保存到
  • 如何使 ASP.NET TextBox 在 AJAX UpdatePanel 中触发 onTextChanged 事件?

    我试图让一个文本框在每次击键时触发它的 onTextChanged 事件 而不是仅在失去焦点时触发 我认为添加 AsyncPostBackTrigger 可以做到这一点 但它仍然不起作用 我想做的事情可能吗 代码如下
  • Windows 匿名管道上的非阻塞 io

    我希望在 Windows 匿名管道上进行非阻塞 io 这是一个 NET 项目 因此如果可能的话我计划使用托管类 我看到 NET 确实有 AnonymousPipeServerStream 和 AnonymousPipeClientStrea
  • mixReducer 中使用的减速器的声纳代码气味

    我正在使用combineReducers来组合reducers和reducer 如下所示 const todo state action gt switch action type case TOGGLE TODO if state id
  • Spring Boot 无法使用 Java 配置更改 Thymeleaf 模板目录

    将 Thymeleaf 模板文件放置在默认值中src main resources templates对我来说工作正常 当我想重命名目录时说mytemplates 这是行不通的 我收到找不到模板位置 classpath templates
  • JavaScript:获取图像尺寸

    我只有一个图像的 URL 我需要仅使用 JavaScript 确定该图像的高度和宽度 用户在页面上无法看到该图像 我怎样才能得到它的尺寸 var img new Image img onload function var height im
  • 如何将符号链接文件添加到 gitlab 存储库

    如何将文件的符号链接添加到 gitlab 存储库 每次我从 gitlab 运行管道时 本地符号链接都会被破坏 任何关于如何为 gitlab repo 内部的文件夹创建符号链接的建议都会很棒 您可以在 Git 存储库中存储符号链接 特殊条目
  • CSS3边框半径简写解决方案

    Is this border radius 10px 10px 0 0 一个缩短的版本 适用于所有识别它的浏览器 border top left radius 10px border top right radius 10px 是的 第一种
  • 具有唯一约束的 Postgres 哈希索引

    由于 Postgres 10 正确支持哈希索引 我想使用哈希索引进行 id 查找 与 btree 相比 哈希索引的大小更小 理论上更快 我有一张桌子 create table t id int create unique index on
  • 使用前瞻的 C++ std::regex 失败

    我需要从磁盘解析 txt 文件 所以我首先做了一个例子来测试正则表达式 这是我的示例代码 std string txt paragraph r nthis is the text file r ni need only this data
  • 为我的网站创建“徽章”,存储用户徽章的最佳方式?使用PHP

    我正在向我的网站添加 徽章 我想知道存储数据的最佳方式是什么 每个徽章都有一个存储在 MySQL 数据库中的 ID 每个用户在 MySQL 数据库中都有自己的行 并且每个用户都有一个 XML 格式的 userdata 文件 因此 我可以将其
  • SONAR:将此 lambda 替换为方法引用

    Sonar 告诉我 用方法引用替换这个 lambda public class MyClass private List
  • 如何使用 iText 和 Flying Saucer 在从 HTML 创建的 PDF 中嵌入字体?

    我在将波兰语字体嵌入从 HTML 转换为 PDF 时遇到问题 我的 HTML 代码正文有样式 我尝试了两种将此类 HTML 转换为 PDF 的方法 FOP 与 htmlcleaner 带飞碟的 iText 对于 FOP 我可以将所有使用的字
  • 在iOS swift中查看录音?

    是否有任何库可以记录特定的活动UIView 我遇到了这个库 ASScreenRecorder master 但当我尝试在 swift 中使用它或任何其他方式记录时 它显示出许多错误UIView哪个正在显示一些动画 例如飘落的雪花和图像的幻灯
  • Django 中的值相对于前一个值自动递增

    有没有一种方法可以相对于前一个字段自动递增字段 例如 如果前一个记录的值为 09 0001 那么下一个记录应该分配为 09 0002 等等 想法 我正在考虑重写保存方法 但我不太确定到底如何 Django 不允许您在模型中拥有多个 Auto
  • pySpark Columnsimilarities 的问题

    太长了 博士 如何使用 pySpark 比较行的相似度 我有一个 numpy 数组 我想在其中比较每一行之间的相似性 print pdArray 0 1 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 7 5 0 0 0 1 0
  • java 是否缓存方法的结果

    I useJMH指定操作的复杂度 如果您从未与 JMH 合作过 请不要担心 JMH 将刚刚推出estimateOperation方法多次 然后得到平均时间 问题 缩小 这个程序会计算Math cbrt Integer MAX VALUE 每
  • Android MediaPlayer 在某些设备上不播放声音

    我为我的应用程序发出了简单的警报声 但问题是声音在某些设备上播放 而在其他设备上则不播放 示例代码如下 public void audioPlayer leshon tingull kur ka kolision Armando 8 7 2
  • 如何隐藏或加密 JavaScript 代码? [复制]

    这个问题在这里已经有答案了 有没有办法隐藏或加密 JavaScript 代码以防止人们查看 复制和 或修改专有程序 您可以混淆它 但没有办法完全保护它 混淆器示例 https obfuscator io https obfuscator i
  • C# 枚举标志比较

    给定以下标志 Flags public enum Operations add 1 subtract 2 multiply 4 divide 8 eval 16 如何实现 IF 条件来执行每个操作 在我的尝试中 第一个条件适用于添加 评估