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 是一个短

那么如何安全地确定枚举成员的值呢?(我不能改变第一年的声明)

C# ValidationAttribute for enums

这是否有效:

int enumValue = Convert.ToInt32(b); 
首先,

您不能-1变量使用值byte然后您应该Unknown值更改为任何其他有效byteFirstEnum不可编译。

此外,您可以使用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);
}