从 int 获取枚举值
Get Enum Values from int
如何从 int 输入中获取枚举值?
假设我在下面有这个枚举。
[Flags]
public enum Weeks
{
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64
}
public List<Weeks> GetEnumValues(int input)
{
// Don't know what is the logic here
// Help is much appreciated
}
则输出如下
Examples:
1.) input = 3; This means Sunday and Monday hence 1 + 2 = 3; This should return List<Weeks> { Sunday, Monday }
2.) input = 20; This means Tuesday and Thursday hence 4 + 16 = 20; This should return List<Weeks> { Tuesday, Thursday }
3.) input = 40; This means Wednesday and Friday hence 8 + 32 = 40; This should return List<Weeks> { Wednesday, Friday }
提前致谢。
您可以通过循环每个枚举 "flag" 并检查每个 "flag" 是否在您的输入值中设置了该位来执行此操作。这是执行此操作的一种方法:
public List<Weeks> GetEnumValues(int input)
{
Weeks inputEnum = (Weeks)input;
var list = new List<Weeks>();
foreach(var enumFlag in Enum.GetValues(typeof(Weeks)).Cast<Weeks>())
{
if (inputEnum.HasFlag(enumFlag))
{
list.Add(enumFlag);
}
}
return list;
}
另一种方法 - 利用 Flags 枚举上的 ToString 构建逗号分隔的值列表这一事实。然后我们可以通过 Enum.Parse:
将每个元素转换回枚举值
public List<Weeks> GetEnumValues(int input)
{
return ((Weeks)input)
.ToString()
.Split(',')
.Select(day => Enum.Parse(typeof(Weeks), day))
.ToList();
}
选择权在你...
@sstan 的回答是正确的,我投了答案。但我只想分享他的解决方案中我的简短版本。
public List<Weeks> GetEnumValues(int input)
{
Weeks inputEnum = (Weeks)input;
return Enum.GetValues(typeof(Weeks)).Cast<Weeks>().Where(x => inputEnum.HasFlag(x)).ToList();
}
如何从 int 输入中获取枚举值? 假设我在下面有这个枚举。
[Flags]
public enum Weeks
{
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64
}
public List<Weeks> GetEnumValues(int input)
{
// Don't know what is the logic here
// Help is much appreciated
}
则输出如下
Examples:
1.) input = 3; This means Sunday and Monday hence 1 + 2 = 3; This should return List<Weeks> { Sunday, Monday }
2.) input = 20; This means Tuesday and Thursday hence 4 + 16 = 20; This should return List<Weeks> { Tuesday, Thursday }
3.) input = 40; This means Wednesday and Friday hence 8 + 32 = 40; This should return List<Weeks> { Wednesday, Friday }
提前致谢。
您可以通过循环每个枚举 "flag" 并检查每个 "flag" 是否在您的输入值中设置了该位来执行此操作。这是执行此操作的一种方法:
public List<Weeks> GetEnumValues(int input)
{
Weeks inputEnum = (Weeks)input;
var list = new List<Weeks>();
foreach(var enumFlag in Enum.GetValues(typeof(Weeks)).Cast<Weeks>())
{
if (inputEnum.HasFlag(enumFlag))
{
list.Add(enumFlag);
}
}
return list;
}
另一种方法 - 利用 Flags 枚举上的 ToString 构建逗号分隔的值列表这一事实。然后我们可以通过 Enum.Parse:
将每个元素转换回枚举值public List<Weeks> GetEnumValues(int input)
{
return ((Weeks)input)
.ToString()
.Split(',')
.Select(day => Enum.Parse(typeof(Weeks), day))
.ToList();
}
选择权在你...
@sstan 的回答是正确的,我投了答案。但我只想分享他的解决方案中我的简短版本。
public List<Weeks> GetEnumValues(int input)
{
Weeks inputEnum = (Weeks)input;
return Enum.GetValues(typeof(Weeks)).Cast<Weeks>().Where(x => inputEnum.HasFlag(x)).ToList();
}