C# ValidationAttribute for enums
本文关键字:enums for ValidationAttribute | 更新日期: 2023-09-27 18:31:59
我有以下枚举:
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;
}
}
所以现在他的问题是我不能再将枚举成员硬投射到 int,因为 FirstEnum 是一个短
。那么如何安全地确定枚举成员的值呢?(我不能改变第一年的声明)
这是否有效:
int enumValue = Convert.ToInt32(b);
首先,
您不能-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);
}