Disons que j'ai un énum comme ceci: et disons que j'ai une variable définie comme: p> Comment faire Je découvre toutes les valeurs de notificationMethodType non définies dans la variable "Types"? En d'autres termes: P> NotificationMethodType notAssigned = NotificationMethodType <that are not> types
3 Réponses :
Si la liste des types ne change jamais, vous pouvez le faire:
NotificationMethodType allTypes = Enum.GetValues(typeof(NotificationMethodType)) .Cast<NotificationMethodType>() .Aggregate ((current, value) => current | value);
Un simple XOR fera le tour ...
NotificationMethodType all = (NotificationMethodType.Email | NotificationMethodType.Fax | NotificationMethodType.Sms); NotificationMethodType used = (NotificationMethodType.Email | NotificationMethodType.Fax); NotificationMethodType unused = (all ^ used);
FWIW, XOR (les ^ opérateurs) et la réponse de Lasse 'et pas' sont mathématiquement la même chose.
var notAssigned = Enum.GetValues(typeof(NotificationMethodType)) .Cast<NotificationMethodType>() .Where(x => !types.HasFlag(x)) .Aggregate((a, x) => a | x);
Waay moins efficace que l'une des 2 réponses qui utilisent des opérateurs bitwises
@ROBERT: Je ne peux pas nier que c'est moins efficace, mais son aptitude dépend vraiment de ce que les besoins de l'OP ont besoin. Votre propre réponse nécessite une valeur distincte toute la valeur code> à être maintenue en synchronisation avec la cauchemar d'entretien principal - un cauchemar de maintenance si cet Enum change jamais! (Et c'est bien davantage d'inconvénient, imo, qu'un problème d'efficacité supposé qui sera probablement jamais i> être remarqué dans la plupart des situations. Je suis évidemment moins libre et facile avec ma bowvoting que vous. )
convenu, tout devrait être défini dans le cadre de l'énum