[英]C# ValidationAttribute for enums
我有以下枚举:
public enum FirstEnum : short
{
Unknown = -1,
Red = 2,
Green = 3
}
public enum SecondEnum
{
Unknown = -1,
Orange = 2,
Apple = 3
}
我现在想编写一个数据注释属性,以便可以验证属性。 所以说我有一堂课:
public class MyClass
{
[EnumValidation(AllowUnKnown = true)]
public FirstEnum First { get; set; }
[EnumValidation(AllowUnKnown = false)]
public SecondEnum Second { get; set; }
}
我的验证属性如下:
public class EnumValidationAttribute : ValidationAttribute
{
public bool AllowUnKnown { get; set; }
public override bool IsValid(object aValue)
{
bool valid = true;
int enumValue = (int) aValue; //** Cannot do hard cast
if (enumValue == -1 && !AllowUnKnown)
valid = false;
return valid;
}
}
所以现在他的问题来了,因为FirstEnum很短,我不能再将枚举成员强制转换为int了。
那么,如何安全地确定枚举成员的值? (我无法更改FirstEnum的声明)
首先,不能将-1
值用于byte
变量,然后应将Unknown
值更改为任何其他有效byte
。 FirstEnum
是不可编译的。
另外,您可以使用Convert.ToInt32
方法将字节值转换为整数。 实际上,下一个代码将true
写入控制台:
byte x1 = 1;
object o1 = x1;
Console.WriteLine(Convert.ToInt32(o1) == 1);
因此,您可以通过转换实现您的方法:
public override bool IsValid(object aValue)
{
int enumValue = Convert.ToInt32(aValue);
return !(enumValue == -1 && !AllowUnKnown);
}
这个工作:
int enumValue = Convert.ToInt32(b);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.