【问题标题】:RegularExpression attribute with Enum带有枚举的正则表达式属性
【发布时间】:2012-04-21 20:26:32
【问题描述】:

我的枚举值为 None,这意味着尚未选择一个值。绝不应将任何内容保存到数据库中。

enum MyEnum
{
    None = 0,
    SomeValue = 1,
...
}

有没有一种方法可以使用数据注释正则表达式,如果选择 None 值,验证应该失败?

【问题讨论】:

    标签: c# regex c#-4.0 data-annotations


    【解决方案1】:

    使用[Range(SomeValue, LastValue)] 约束将有更好的机会。

    【讨论】:

    • Range 成功了。有趣的是 [RegularExpression("[1-5]")] 不起作用,似乎 range 能够以某种方式将 value 转换为 int,而 RegularExpression 没有。
    • 您也可以通过添加此属性来确保枚举中存在该值:[EnumDataType(typeof(MyEnum))] - 如果您的枚举中有间隙,这可能是必要的,例如 Value1=1, Value2= 2, Value3=4,Value4=8 等等,并且您要确保只使用有效的枚举值。
    【解决方案2】:

    如果您的所有枚举都将 None 定义为 0,我会很想执行以下操作:

     [RegularExpression("[1-9][0-9]*", ErrorMessage = "None should never be saved to database.")]
     public MyEnum val { get; set; }
    

    【讨论】:

    • 不行,不行,[RegularExpression("[1-5]")]也不行,看来是把enum值转成int有问题。然而,范围确实有效。
    猜你喜欢
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多