je en train d'écrire une logique de casting enum générique, et je suis tombé sur un phénomène étrange avec la méthode Enum.ToObject
:Assigner InvalidValue à la variable Enum (pourquoi est-ce pas lancer une exception?)
[TestClass]
public class UnitTest1
{
public enum FixedSet
{
Value1 = 1,
Value2 = 2,
Value3 = 3
}
[TestMethod]
public void TestMethod1()
{
try
{
var intVal = 123;
FixedSet actual = (FixedSet)Enum.ToObject(typeof(FixedSet), intVal);
Assert.Fail("Thought an exception should have occured");
}catch(Exception e)
{
//should have thrown an exception
}
}
}
`` `
Je m'attendrais à ce que cela sorte une exception, puisque 123 n'est pas une valeur du type enum donné, cependant, je suis capable de le définir comme la valeur de cette variable FixedSet.
Pourquoi est-ce autorisé? J'ai toujours pensé cela devrait échouer puisque C# est un langage fortement typé, ce qui est un ENUM fortement défini ...
Non, cela ne fonctionne pas comme ça. 'Enum' est son type sous-jacent. –
copier coller le code, vous verrez qu'il échoue. la question est "Pourquoi cela ne lance-t-il pas une exception" –
[Définir "échouer".] (https://dotnetfiddle.net/Xt38n6) Vous voulez dire qu'il arrive à l'assertion? –