Я всегда настороженно отношусь к написанию пользовательских исключений, просто на том основании, что они не всегда четко документированы и вызывают путаницу, если не названы правильно.
В этом случае я бы выдал ArgumentException для ошибки проверки флагов. Все зависит от предпочтений. Некоторые стандарты кодирования, которые я видел, заходят так далеко, что определяют, какие типы исключений следует создавать в подобных сценариях.
Если пользователь пытается передать что-то, что не является перечислением, я бы выдал исключение InvalidOperationException.
Edit:
Остальные поднимают интересный вопрос, что это не поддерживается. Моя единственная проблема, связанная с NotSupportedException, заключается в том, что, как правило, это исключения, которые генерируются, когда в систему вводится «темная материя», или, другими словами, «этот метод должен войти в систему через этот интерфейс, но мы не включайте до версии 2.4 "
Я также видел исключение NotSupportedExceptions как исключение при лицензировании: «вы используете бесплатную версию этого программного обеспечения, эта функция не поддерживается».
Редактировать 2:
Еще один возможный:
System.ComponentModel.InvalidEnumArgumentException
Исключение выдается при использовании недопустимых аргументов, которые являются перечислителями.