繁体   English   中英

枚举的C#ValidationAttribute

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM