parse enum convert c# validation enums tryparse

c# - convert - Enum.TryParse devuelve verdadero para cualquier valor numérico



enum.tryparse c# (1)

Este comportamiento es por diseño.

La documentation dice:

. Si value es la representación de cadena de un entero que no representa un valor subyacente de la enumeración de TEnum, el método devuelve un miembro de enumeración cuyo valor subyacente es el valor convertido a un tipo integral. Si este comportamiento no es deseable, llame al método IsDefined para asegurarse de que una representación de cadena particular de un entero sea realmente un miembro de TEnum.

Llame a Enum.IsDefined para que el valor que analizó realmente exista en esta enum particular.

Si lidias con [Flags] enums (máscaras de bits), se volverá más complicado.

Me encuentro con un comportamiento que no esperaba cuando uso Enum.TryParse.

Si tengo una enumeración:

public enum MyEnum { ValueA, ValueB, ValueC }

Y luego paso un valor numérico (como una cadena) a Enum.TryParse, como:

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

A pesar de que la cadena "1234" no es un valor posible, el resultado volverá a ser cierto, y mi outputEnum tendrá un valor de 1234.

¿Hay alguna manera de evitar este tipo de comportamiento? Intento escribir una función que procesará la entrada de cadena arbitraria como una enumeración, y esto ha lanzado un poco de una llave inglesa en mi detección de entrada incorrecta.