Je viens de rencontrer un comportement étrange lors de la définition d'une valeur d'enum par réflexion. Il semble que je suis en mesure de définir une valeur non valide pour le ENUM:Capable d'affecter une valeur Enum non valide via la réflexion
class EnumReflector
{
public enum MyEnum
{
Option1 = 0,
Option2,
Option3
}
public MyEnum TheEnum { get; set; }
public void Test()
{
PropertyInfo pi = this.GetType().GetProperty("TheEnum");
string badValue = "1234";
object propertyValue = Enum.Parse(pi.PropertyType, badValue, true);
pi.SetValue(this, propertyValue, null);
}
}
Maintenant, si j'appelle ceci:
EnumReflector e = new EnumReflector();
e.Test();
if (e.TheEnum == EnumReflector.MyEnum.Option1 ||
e.TheEnum == EnumReflector.MyEnum.Option2 ||
e.TheEnum == EnumReflector.MyEnum.Option3)
{
Console.WriteLine("Value is valid");
}
else
{
Console.WriteLine("Value is invalid: {0} ({1})", e.TheEnum.ToString(), (int)e.TheEnum);
}
La sortie est:
valeur est invalide : 1234 (1234)
Comment cela peut-il être? Je pense que l'une des natures mêmes des enums est leur ensemble de valeurs restreint!
Bien sûr. Merci pour le conseil IsDefined() – Ive