Я просто столкнулся с каким-то странным поведением при настройке значения enum через отражение. Похоже, что я в состоянии установить недопустимое значение для перечисления:Возможность присвоить неверное значение Enum посредством отражения
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);
}
}
Теперь, если я называю это:
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);
}
Выход:
Значение недействительно : 1234 (1234)
Как это может быть? Я, хотя одна из самых особенностей перечислений - их ограниченный набор значений!
Конечно. Спасибо за подсказку IsDefined() – Ive 2010-11-25 11:46:38