C# 枚举值不仅限于定义中列出的值,还可以存储任何其基础类型的值。如果未定义基础类型,则使用 Int32
或简单的 int
。
我正在开发一个 WCF 服务,需要确保某个枚举有一个指定的值,而不是所有枚举默认值为 0。我从一个单元测试开始,以确定 [Required]
是否适用于此处。
using System.ComponentModel.DataAnnotations;
using Xunit;
public enum MyEnum
{
// I always start from 1 in order to distinct first value from the default value
First = 1,
Second,
}
public class Entity
{
[Required]
public MyEnum EnumValue { get; set; }
}
public class EntityValidationTests
{
[Fact]
public void TestValidEnumValue()
{
Entity entity = new Entity { EnumValue = MyEnum.First };
Validator.ValidateObject(entity, new ValidationContext(entity, null, null));
}
[Fact]
public void TestInvalidEnumValue()
{
Entity entity = new Entity { EnumValue = (MyEnum)(-126) };
// -126 is stored in the entity.EnumValue property
Assert.Throws<ValidationException>(() =>
Validator.ValidateObject(entity, new ValidationContext(entity, null, null)));
}
}
第二个测试未抛出任何异常。
我的问题是:是否有验证器属性可检查提供的值是否在Enum.GetValues
中?
更新。
请确保在我的单元测试中使用ValidateObject(Object, ValidationContext, Boolean)
,并将最后一个参数设置为True
,而不是像之前使用ValidateObject(Object, ValidationContext)
。