Stavo lavorando a un metodo di servizio Web che riceverà una serie di valori come parametro e quindi, all'interno del metodo, ho convertito i valori nell'array in valori enum e li ho memorizzati in una lista di enum. Tuttavia, quando viene passato un valore che non è enum, viene aggiunto alla lista enum senza problemi. No InvalidCastException
, niente. Ho fatto un progetto di test che assomiglia a questo:C# enum array che accetta un valore errato
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
}
}
quando l'eseguo, l'output è:
Value1
Value2
15
Per il mio servizio web, io implemento una convalida, quindi questo non sarà mai hapen affatto. Ma ... questo è strano! Non dovrebbe il tempo di esecuzione lanciare un InvalidCastException
o ArgumentOutOfRangeException
, o qualcosa di simile? Dal momento che ho ottenuto una lista di enum (e non di valori int), voglio che i valori siano limitati ai valori dell'enum (questo è ciò che è un enum).
Mi manca qualcosa? Si tratta di un bug .NET, un bug C# o c'è qualcosa che non conosco con enumerazioni?
1 per la domanda goof – Tigran
Leggere questo: [Perché colata int al valore enum non validi non buttare eccezione?] [1] [1]: http://stackoverflow.com/ questions/6413804/why-does-casting-int-to-invalid-enum-value-not-throw-exception – vinayvasyani