Enum.TryParse renvoie true pour toutes les valeurs numériques

Je me heurte à un comportement auquel je ne m’attendais pas avec Enum.TryParse.

Si j’ai une énumération:

public enum MyEnum { ValueA, ValueB, ValueC } 

Et puis je passe une valeur numérique (sous forme de chaîne) dans Enum.TryParse, comme:

 MyEnum outputEnum; bool result = Enum.TryParse("1234", out outputEnum); 

Bien que la chaîne “1234” ne soit pas une valeur possible, le résultat reviendra à true et mon outputEnum aura une valeur de 1234.

Y a-t-il un moyen d’éviter ce genre de comportement? J’essaie d’écrire une fonction qui traitera des entrées de chaînes arbitraires en tant qu’enum, et cela a créé un peu de monkeywrench dans ma détection des mauvaises entrées.

Ce comportement est inhérent à la conception.

La documentation dit:

. Si value est la représentation sous forme de chaîne d’un entier qui ne représente pas une valeur sous-jacente de l’énumération TEnum, la méthode renvoie un membre d’énumération dont la valeur sous-jacente est une valeur convertie en un type intégral. Si ce comportement est indésirable, appelez la méthode IsDefined pour vous assurer qu’une représentation de chaîne particulière d’un entier est réellement membre de TEnum.

Appelez Enum.IsDefined pour vous assurer que la valeur que vous avez analysée existe réellement dans cette enum particulière.

Si vous avez affaire à des [Flags] énumérations (bitmasks), ça va devenir plus compliqué.