public static class EnumFlagExtensions { // https://stackoverflow.com/questions/4171140/how-to-iterate-over-values-of-an-enum-having-flags public static IEnumerable<T> GetUniqueFlags<T>(this T value) where T : Enum { // if it's not a flag enum, return empty Debug.Assert(value.GetType().IsDefined(typeof(FlagsAttribute), false), "Not a \"Flags\" enum type"); if (!value.GetType().IsDefined(typeof(FlagsAttribute), false)) yield break; var valueLong = Convert.ToUInt64(value, CultureInfo.InvariantCulture); foreach (var enumValue in value.GetType().GetEnumValues()) { if ( enumValue is T flag // cast enumValue to T // convert flag to ulong && Convert.ToUInt64(flag, CultureInfo.InvariantCulture) is ulong bitValue && (bitValue & (bitValue - 1)) == 0 // is this a single-bit value? && (valueLong & bitValue) != 0 // is the bit set? ) { yield return flag; } } } }
May 5, 2021
c# GetUniqueFlags for Flags Enum
Use this to get unique flags from a combined flags enum value
Subscribe to:
Posts (Atom)