Учитывая это:
[Flags]
public enum MyEnum {
One = 1,
Two = 2,
Four = 4,
Eight = 8
}
public static class FlagsHelper
{
public static bool Contains(this MyEnum keys, MyEnum flag)
{
return (keys & flag) != 0;
}
}
Можно ли написать общую версию Contains, которая будет работать для любого enum
, а не только MyEnum
?
Edit:
Это будет моя версия после прочтения ваших ответов:
public static bool Contains(this Enum keys, Enum flag)
{
ulong keysVal = Convert.ToUInt64(keys);
ulong flagVal = Convert.ToUInt64(flag);
return (keysVal & flagVal) == flagVal;
}
Только что понятая - это плохая идея проверить, как я проверял (return (keys & flag) != 0;
), потому что параметр flag
может быть фактически несколькими флагами, а здравый смысл - вернуть true, только если keys
содержит все из них. Кроме того, я не буду проверять нулевые значения или даже убедиться, что они одного типа. Я мог бы использовать разные типы.