gpt4 book ai didi

c# - 从 C# 中的值解码位掩码

转载 作者:行者123 更新时间:2023-11-30 13:30:47 25 4
gpt4 key购买 nike

我正在尝试解码位掩码

[Flags]
public enum Amenities
{
BusinessCenter = 1,
FitnessCenter = 2,
HotTub = 4,
InternetAccess = 8,
KidsActivities = 16,
Kitchen = 32,
PetsAllowed = 64,
Pool = 128,
Restaurant = 256,
Spa = 512,
Whirlpool = 1024,
Breakfast = 2048,
Babysitting = 4096,
Jacuzzi = 8192,
Parking = 16384,
RoomService = 32768,
AccessibleTravel = 65536,
AccessibleBathroom = 131072,
RollShower = 262144,
HandicappedParking = 524288,
InRoomAccessibility = 1048576,
AccessibilityDeaf = 2097152,
BrailleSignage = 4194304,
FreeAirportShuttle = 8388608,
IndoorPool = 16777216,
OutdoorPool = 33554432,
ExtendedParking = 67108864,
FreeParking = 134217728
}

我如何编写一个函数来解码 5722635 之类的值并返回以 5722635 编码的所有便利设施的列表。

结果应该是这样的:

此属性具有以下便利设施:

  • 商务中心
  • 健身中心
  • 上网
  • 现场可用的水疗中心
  • 保姆
  • parking 位
  • 无障碍旅行路径
  • 无障碍浴室
  • 无障碍淋浴间
  • 室内无障碍设施
  • 盲文或凸起标牌

我一直在尝试类似的事情

public List<Amenities> Decode(long mask)
{
var list = new List<Amenities>();
for (var index = 0; index < 16; index++)
{
var bit = 1 << index;
if (0 != (bit & mask))
{
list.Add(new Amenities(index));
}
}
return list;
}

但无法让它工作。任何关于如何使这项工作正常工作的建议将不胜感激。

最佳答案

单行呢?

var mask = (Amenities)5722635;

var result =
Enum.GetValues(typeof(Amenities))
.Cast<Amenities>()
.Where(value => mask.HasFlag(value))
.ToList();

您可以缓存 Enum.GetValues(typeof(Amenities)).Cast<Amenities>() 的结果以提高性能。

关于c# - 从 C# 中的值解码位掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27294690/

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