リフレクションで列挙型の値を設定すると、ちょっと変わった動作が発生しました。リフレクションで無効なEnum値を割り当てることができます
が 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);
}
出力がされています:
値が無効である私はこれを呼び出した場合、
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); } }
今:私は列挙型のため、無効な値を設定することができるよように思えます:1234(1234)
これはどのようにすることができますか?私はenumの本質の1つが制限された価値のあるセットですが、
もちろん。 IsDefined()チップのおかげで – Ive