Заимствуя код из этого вопроса Как сделать Я проверяю, установлено ли более одного флага перечисления? Я попытался реализовать универсальное расширение, которое выполняет этот тест.
Моя первая попытка заключалась в следующем.
public static bool ExactlyOneFlagSet(this Enum enumValue)
{
return !((enumValue & (enumValue - 1)) != 0);
}
Что привело к
Оператор «-» нельзя применять к операндам типа «System.Enum» и «int».
Хорошо, логично, поэтому я подумал, что попробую что-то вроде этого.
public static bool ExactlyOneFlagSet<T>(this T enumValue) where T : struct, IConvertible
{
return !(((int)enumValue & ((int)enumValue - 1)) != 0);
}
Что привело к
Невозможно преобразовать тип «T» в «int»
Что также имеет смысл после прочтения об этом поведении, но тогда как этот метод расширения может быть реализован. Есть любезный помочь???