Estaba trabajando en un método de servicio web que recibirá una matriz de entradas como parámetro, y luego, dentro del método, convertí los valores en la matriz en valores enum, y los almacené en una lista enum. Sin embargo, cuando se pasa un valor que no está en la enumeración, se agrega a la lista de enumeración sin problemas. No InvalidCastException
, nada. Hice un proyecto de prueba que tiene este aspecto:C# enumeración enum aceptando un valor incorrecto
static class Program
{
static void Main(string[] args)
{
List<TestValues> values = new List<TestValues>() {
TestValues.Value1,
TestValues.Value2,
(TestValues)15
};
foreach (var val in values)
Console.WriteLine(val);
Console.Read();
}
enum TestValues
{
Value1 = 2,
Value2 = 4,
Value3 = 8
}
}
Cuando lo ejecuto, la salida es:
Value1
Value2
15
Por mi servicio web, voy a poner en práctica una validación, así que esto nunca va a hapen en absoluto. Pero ... ¡esto es extraño! ¿No debería el tiempo de ejecución arrojar un InvalidCastException
o ArgumentOutOfRangeException
, o algo similar? Como obtuve una lista de enumeraciones (y no de valores int), quiero que los valores se limiten a los valores de la enumeración (para eso sirve una enumeración).
¿Echo de menos algo? ¿Es esto un error de .NET, un error de C# o hay algo que no sé con enumeraciones?
1 para la pregunta gazapo – Tigran
Leer éste: [¿Por qué fundición int al valor de enumeración no válido NO tirar excepción?] [1] [1]: http://stackoverflow.com/ questions/6413804/why-does-casting-int-to-invalid-enum-value-not-throw-exception – vinayvasyani