gpt4 book ai didi

c# - 如何将这几天转换为位掩码?

转载 作者:行者123 更新时间:2023-11-30 17:10:48 24 4
gpt4 key购买 nike

我有一个使用枚举将位掩码转换为天数列表的方法。我正试图做相反的事情,但遇到了麻烦。我有 DaysOfWeekToEnum 工作,但没有 DaysOfWeekFromEnum。以下是我正在尝试做的事情。谁能帮忙?

public static short DaysOfWeekFromEnum(IEnumerable<DaysInWeekIds> daysOfWeek)
{
short mask;

foreach (var item in daysOfWeek)
{
mask &= item; // ????
}

return mask
}

public static IEnumerable<DaysInWeekIds> DaysOfWeekToEnum(short mask)
{
var values = new List<DaysInWeekIds>();

foreach (short enumValue in Enum.GetValues(typeof(DaysInWeekIds)))
{
if (mask & enumValue == enumValue)
{
values.Add((DaysInWeekIds) Enum.ToObject(typeof(DaysInWeekIds),
enumValue));
}
}

return values;
}

/// <summary> The days in week ids. </summary>
public enum DaysInWeekIds : short
{
M = 1,
Tu = 2,
W = 4,
Th = 8,
F = 16,
Sa = 32,
Su = 64
}

最佳答案

设置附加位应该是|=,而不是&=

您还可以将字符串表示形式连接在一起,并将结果传递给 Enum.Parse 方法。这效率不高,但代码看起来会更短。

var res = (DaysInWeekIds)Enum.Parse(
typeof(DaysInWeekIds)
, string.Join(",", daysOfWeek.Select(d => d.ToString()).ToArray())
);

这为 {M, Th, F} ( link to ideone ) 返回 25

关于c# - 如何将这几天转换为位掩码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11816672/

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