/// <summary> /// Includes an enumerated type and returns the new value /// </summary> public static T Include <T>(this Enum extended, T item) { Type type = extended.GetType(); //determine the values object result = extended; NarrowedValue parsed = new NarrowedValue(item, type); if (parsed.Signed is long) { result = Convert.ToInt64(extended) | (long)parsed.Signed; } else if (parsed.Unsigned is ulong) { result = Convert.ToUInt64(extended) | (ulong)parsed.Unsigned; } //return the final value return((T)Enum.Parse(type, result.ToString())); }
/// <summary> /// Checks if an enumerated type contains a value /// </summary> public static bool Has <T>(this Enum extended, T check) { Type type = extended.GetType(); NarrowedValue parsed = new NarrowedValue(check, type); if (parsed.Signed is long) { return((Convert.ToInt64(extended) & (long)parsed.Signed) == parsed.Signed); } else if (parsed.Unsigned is ulong) { return((Convert.ToUInt64(extended) & (ulong)parsed.Unsigned) == parsed.Unsigned); } else { return(false); } }