gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:08:04 25 4
gpt4 key购买 nike

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

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

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 是这两种类型的组合。我想将它们分开,因为这应该是一种学习体验,将它们分开可能在其他情况下很有用(IE、发票未支付原因等...)。

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

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

最佳答案

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

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

要确定是否正在“下雨打雷,可能还有其他原因”,您需要:

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

编辑(为了完整性):

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

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

关于c# - 确定枚举值是否在列表中 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/164425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com