确定枚举值是否在列表中 (C#)

2023-11-22

我正在构建一个有趣的小应用程序来确定我是否应该骑自行车上班。

我想测试一下是下雨还是雷雨。

public enum WeatherType : byte
{ Sunny = 0, Cloudy = 1, Thunderstorm = 2, Raining = 4, Snowing = 8, MostlyCloudy = 16 }

我想我可以做这样的事情:

WeatherType _badWeatherTypes = WeatherType.Thunderstorm | WeatherType.Raining;
if(currentWeather.Type == _badWeatherTypes)
{
 return false;//don't bike
}

但这不起作用,因为 _badWeatherTypes 是两种类型的组合。我想将它们分开,因为这应该是一种学习经历,并且将其分开在其他情况下可能会很有用(即,发票未付款原因等......)。

我也不想这样做:(这将消除为多人配置的能力)

if(WeatherType.Thunderstorm)
{
 return false; //don't bike
}
etc...

您当前的代码会说明是否是exactly“下雨打雷”。要查明是否“下雨、打雷,可能还有其他情况”,您需要:

if ((currentWeather.Type & _badWeatherTypes) == _badWeatherTypes)

判断是否“下雨”or雷鸣般的,可能还有其他”你需要:

if ((currentWeather.Type & _badWeatherTypes) != 0)

编辑(为了完整性):

最好使用FlagsAttribute,即用[Flags]。对于按位逻辑来说,这不是必需的,但会影响如何ToString()行为。 C# 编译器忽略此属性(至少目前;C# 3.0 规范没有提及它),但对于作为有效标志的枚举来说通常是一个好主意,并且它记录了该类型的预期用途。同时,约定是当您使用标志时,您将枚举名称复数 - 因此您将其更改为WeatherTypes(因为任何实际值实际上都是 0 种或多种天气类型)。

还值得思考“阳光明媚”的真正含义。目前它的值为 0,这意味着它不存在其他所有内容;你不可能同时晴天和下雨(当然,这在物理上是可能的)。请不要编写禁止彩虹的代码! ;) 另一方面,如果在您的实际用例中您确实想要一个意味着“不存在所有其他值”的值,那么您就可以了。

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

确定枚举值是否在列表中 (C#) 的相关文章

随机推荐

  • Chrome 扩展中的同步消息传递?

    我试图阻止脚本文件在用户定义的网站上加载 阻止我正在使用的脚本文件beforeload event and event preventDefault 在内容脚本中 只要我已经知道网站列表 它就可以正常工作 我的问题是我事先不知道网站列表 因
  • 如何在 Windows 7 中从代理后面使用 sbt?

    我正在尝试跑步SBT on Windows 7的 为此 我按照类似线程中的步骤进行操作 如何从代理后面使用 sbt 我有以下相关的 系统变量 变量名称 JAVA OPTS变量值 Dhttp proxySet true Dhttp proxy
  • 如何在 IIS 管理器中为 ASP.NET 4.0 应用程序添加用户?

    我已在 IIS 7 5 中安装了 ASP NET 4 0 Web 表单应用程序 如果我将应用程序池设置为默认应用程序池 NET Framework 2 0 我得到的图标提供商 NET 角色和 NET 用户显示在 IIS 管理器中应用程序的配
  • 使用 ThreadLocal 进行日期转换

    我需要将传入日期字符串格式 20130212 YYYYMMDD 转换为 12 02 2013 DD MM YYYY using ThreadLocal 我知道一种无需ThreadLocal 谁能帮我 转换无ThreadLocal final
  • Twitter Bootstrap 工具提示在要移出窗口时无法正确对齐

    当我有一个与 Twitter Bootstrap 工具提示关联的元素并且工具提示将在浏览器窗口外重叠时 它会尝试在窗口内重新对齐 但垂直方向未对齐 即工具提示的顶部对齐现在居中而不是在目标元素上方 以前有人遇到过这个问题吗 如果有 解决 修
  • 注意:...第 0 行未知 - 如何找到正确的行,它不是“第 0 行”

    编辑 添加了 PDO 调用 这是实际的错误 Notice Object of class PDOStatement could not be converted to int in Unknown on line 0 一般来说 我怎样才能找
  • 矢量分配崩溃

    vector lt vector
  • tkinter TclError:读取位图文件时出错

    我正在尝试设置一个应用程序图标 python3 tkinter 如下所示 Interface root title Quicklist Editor root iconbitmap home jacob icons qle icon ico
  • ASP.NET MVC:ViewModel 与域实体

    我正在使用 MVC 3 构建一个概念应用程序 试图了解它的方法 我之前在 WebForms 中使用 n 层方法完成了一些非常繁重的应用程序 通常由具有存储库的域对象和在存储之前对其进行操作的服务组成 我正在尝试将我过去做事的方式与在 MVC
  • 如何更改当前的 URL?

    我有以下代码可以从 JavaScript 中更改页面 var newUrl some code to build up URL string window location replace newUrl 但它不会更改顶部 URL 因此当有人
  • Apache Spark 处理倾斜数据

    我有两张桌子想连接在一起 其中之一的数据偏差非常严重 这导致我的 Spark 作业无法并行运行 因为大部分工作都是在一个分区上完成的 我听过 读过并尝试对我的密钥进行加盐以增加分发 https www youtube com watch v
  • “使用警告”与“#!/usr/bin/perl -w”有区别吗?

    我读到最好use warnings 而不是放置一个 w在shebang的最后 两者有什么区别 警告编译指示是命令行标志 w 的替代品 但编译指示仅限于封闭块 而标志是全局的 看佩勒克斯警告了解更多信息和内置警告类别列表 warnings文档
  • 为什么“find . -name *.txt | xargs du -hc”给出多个总计?

    我有一大堆目录 我正在尝试计算其中数百个 txt 文件的总大小 我尝试过这个 大部分有效 find name txt xargs du hc 但最后我没有给我一个总数 而是得到了几个 我的猜测是 管道一次只会传递这么多行 find 的输出
  • Cypress:存根打开窗口

    在我的应用程序中有一个推荐列表 单击该列表会打开一个带有动态地址的新窗口 window open shopURL blank 现在我正在尝试存根 windows open 事件 如下所示https github com cypress io
  • 如何查找AWS S3存储桶中的重复文件?

    有没有办法在 Amazon S3 存储桶中递归查找重复文件 在普通文件系统中 我只需使用 fdupes r my directory Amazon S3 中没有 查找重复项 命令 但是 您确实执行以下操作 检索一个对象列表在桶里 寻找具有以
  • 如何返回至少 4D 的数组:模拟 numpy.atleast_4d 的高效方法

    numpy 提供了三个方便的例程来将数组转换为至少 1D 2D 或 3D 数组 例如通过numpy atleast 3d 我需要多一维的等价物 atleast 4d 我可以想到使用嵌套 if 语句的各种方法 但我想知道是否有更有效和更快的方
  • 我可以从 PowerShell 访问我的自定义 .NET 类吗?

    我对 PowerShell 和 NET 类有一些问题和疑问 我正在尝试编写一个 foo 类 它将调用 Rest Web 服务并执行一些任务 如果我在 GAC 中部署该类 那么我可以从 PowerShell 调用它吗 Try ADD TYPE
  • 此版本的 Realm 不支持在 Realm Studio 中打开格式版本 11 的 Realm 文件

    我正在使用 React Native 在此我指的是this在 React Native 中使用领域数据库的文档 我可以创建react native数据库 但无法在Realm Studio V3 11 0中打开它 当我在工作室中打开保存的 R
  • 使用 JavaScript 创建 HTML 文件

    我正在寻找一种使用 JavaScript 函数在本地目录中创建新 HTML 文件的方法 这可能吗 Thanks 客户端 是的 但您可能需要创建一个新的 ActiveX 对象 因此浏览器只能是 IE 服务器端 只需使用任何服务器端脚本语言 J
  • 确定枚举值是否在列表中 (C#)

    我正在构建一个有趣的小应用程序来确定我是否应该骑自行车上班 我想测试一下是下雨还是雷雨 public enum WeatherType byte Sunny 0 Cloudy 1 Thunderstorm 2 Raining 4 Snowi