如何将返回的枚举值转换为其整数值?
我想获取在 _allVisibleDays
枚举中设置的所有标志作为整数值,就像:
Tuesday
和 Wednesday
已设置,然后我想将这些名称转换为 DayOfWeek
枚举以获取整数值:
所以 Tuesday
返回 2
和 Wednesday
3
而不是 2
并且以下枚举的 4
。
我在SO上找到了这个方法:
public IEnumerable<int> GetFlags()
{
foreach (Enum value in Enum.GetValues(typeof(VisibleDayOfWeek)))
if (_allVisibleDays.HasFlag(value))
yield return (int) value;
}
但我不能让它仅仅用于将枚举(上面的值)转换为整数的简单示例...
private VisibleDayOfWeek _allVisibleDays;
[Flags]
enum VisibleDayOfWeek : int
{
None = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
Saturday = 32,
Sunday = 64
}
最佳答案
由于您的 VisibleDayOfWeek
是一个 Flags
枚举,并且 DayOfWeek不是,两者没有直接对应的翻译(比如VisibleDayOfWeek.Friday
是16,而DayOfWeek.Friday
是5)。特别是因为这些只是一周中的几天并且将来可能不会改变(我希望!)我认为这里最好的选择就是编写一个带有检查的简单实用方法:
public IEnumerable<DayOfWeek> ConvertFromVisible(VisibleDayOfWeek visibleDay)
{
if ((visibleDay & VisibleDayOfWeek.Monday) == VisibleDayOfWeek.Monday)
yield return DayOfWeek.Monday;
if ((visibleDay & VisibleDayOfWeek.Tuesday) == VisibleDayOfWeek.Tuesday)
yield return DayOfWeek.Tuesday;
if ((visibleDay & VisibleDayOfWeek.Wednesday) == VisibleDayOfWeek.Wednesday)
yield return DayOfWeek.Wednesday;
if ((visibleDay & VisibleDayOfWeek.Thursday) == VisibleDayOfWeek.Thursday)
yield return DayOfWeek.Thursday;
if ((visibleDay & VisibleDayOfWeek.Friday) == VisibleDayOfWeek.Friday)
yield return DayOfWeek.Friday;
if ((visibleDay & VisibleDayOfWeek.Saturday) == VisibleDayOfWeek.Saturday)
yield return DayOfWeek.Saturday;
if ((visibleDay & VisibleDayOfWeek.Sunday) == VisibleDayOfWeek.Sunday)
yield return DayOfWeek.Sunday;
}
这样做的好处是可以自动返回 DayOfWeek
枚举,而不是稍后转换的整数。
此外,由于这跳过了反射,因此它应该具有更高的性能以及更能抵抗值的变化(尽管我怀疑这无论如何都会发生)。
编辑:如果你想调整它们返回的顺序(比如你想从周日开始到周六),你可以轻松地改变上面几行的顺序。
关于c# - 从枚举标志中获取所有设置的枚举名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15598623/