public static IEnumerable<T> GetEnumValuesFromFlagsEnum<T>(Int32 value) where T : struct
{
T[] values = (T[])Enum.GetValues(typeof(T));
foreach (var itemValue in values)
{
if((value & Convert.ToInt32(itemValue)) != 0)
{
yield return itemValue;
}
}
}
测试
[TestMethod]
public void GetEnumValuesFromFlagsEnumTestHelper()
{
var foods = EnumHelper.GetEnumValuesFromFlagsEnum<Foods>(9);
Assert.AreEqual(2,foods.Count());
Assert.IsTrue(foods.Contains(Foods.主食));
Assert.IsTrue(foods.Contains(Foods.菜3));
foreach (var food in foods)
{
Console.WriteLine(food);
}
}
[Flags]
public enum Foods
{
主食=1,
菜1 = 2,
菜2 = 4,
菜3=8,
菜4 = 16
}
本文介绍了一种从带有标志位的整数值中获取枚举类型所有匹配项的方法,并通过一个具体的测试案例验证了该方法的有效性。该方法利用C#语言特性实现了对枚举值的筛选和返回。
843

被折叠的 条评论
为什么被折叠?



