C#枚舉值不僅限於它的定義中列出的值,並且可以存儲它的任何基類型值。如果基本類型未定義爲Int32
或僅使用int
。DataAnnotations命名空間中的枚舉值是否有現成的驗證器?
我正在開發一個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
?
更新。 確保使用最後一個參數爲True
而不是ValidateObject(Object, ValidationContext)
的ValidateObject(Object, ValidationContext, Boolean)
,正如我在單元測試中所做的那樣。
我從來沒有使用過,所以我不知道它是否檢查值,但你可以嘗試EnumDataTypeAttribute:http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.enumdatatypeattribute%28v=vs.95%29 .aspx –