Si la liste des types ne change jamais, vous pouvez procéder ainsi :
NotificationMethodType allTypes = NotificationMethodType.Email |
NotificationMethodType.Fax |
NotificationMethodType.Sms;
NotificationMethodType notAssigned = allTypes & ~types;
Le ~ crée une valeur inverse, en inversant tous les bits.
Une façon typique de définir de tels enums pour au moins garder la définition de "allTypes" locale à l'enum serait d'inclure deux nouveaux noms dans l'enum :
[Flags]
public enum NotificationMethodType {
None = 0,
Email = 1,
Fax = 2,
Sms = 4,
All = Email | Fax | Sms
}
Note : Si vous choisissez d'ajouter le All
à l'enum, notez que si types
était vide, vous n'obtiendriez pas un enum qui serait imprimer comme "Email, Fax, Sms", mais plutôt comme "Tous".
Si vous ne voulez pas maintenir manuellement la liste des allTypes
vous pouvez le faire en utilisant l'option Enum.GetValues
méthode :
NotificationMethodType allTypes = 0;
foreach (NotificationMethodType type in Enum.GetValues(typeof(NotificationMethodType)))
allTypes |= type;
ou vous pouvez faire la même chose avec LINQ :
NotificationMethodType allTypes =
Enum.GetValues(typeof(NotificationMethodType))
.Cast<NotificationMethodType>()
.Aggregate ((current, value) => current | value);
Cela permet de construire le allType
en faisant un OU entre toutes les valeurs individuelles de l'enum.