首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# ValidationAttribute for enum

C# ValidationAttribute for enum
EN

Stack Overflow用户
提问于 2016-01-27 06:01:30
回答 2查看 1.4K关注 0票数 1

我有以下几个理由:

代码语言:javascript
复制
public enum FirstEnum : short
{
    Unknown = -1,
    Red = 2,
    Green = 3
}

public enum SecondEnum 
{
    Unknown = -1,
    Orange = 2,
    Apple = 3
}

现在,我想编写一个数据注释属性,以便验证属性。所以说我有个课:

代码语言:javascript
复制
public class MyClass
{
    [EnumValidation(AllowUnKnown = true)]
    public FirstEnum  First { get; set; }

    [EnumValidation(AllowUnKnown = false)]
    public SecondEnum  Second { get; set; }
}

我的验证属性如下:

代码语言:javascript
复制
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做一个enum成员的硬转换。

那么如何安全地确定enum成员的值呢?(我不能更改FirstEnum的声明)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-28 02:26:40

这是否有效:

代码语言:javascript
复制
int enumValue = Convert.ToInt32(b); 
票数 0
EN

Stack Overflow用户

发布于 2016-01-27 06:15:56

首先,不能对-1变量使用byte值,然后应该将Unknown值更改为任何其他有效的byteFirstEnum是不可编译的。

此外,还可以使用Convert.ToInt32方法将字节值转换为整数。实际上,下一段代码将true写到控制台:

代码语言:javascript
复制
byte x1 = 1;
object o1 = x1;
Console.WriteLine(Convert.ToInt32(o1) == 1);

因此您可以通过转换实现您的方法:

代码语言:javascript
复制
public override bool IsValid(object aValue)
{
    int enumValue = Convert.ToInt32(aValue);
    return !(enumValue == -1 && !AllowUnKnown);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35029891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档