सी # enum मान केवल इसकी परिभाषा में सूचीबद्ध मानों तक सीमित नहीं हैं और इसके मूल प्रकार के किसी भी मूल्य को स्टोर कर सकते हैं। यदि आधार प्रकार Int32
से परिभाषित नहीं किया गया है या बस int
का उपयोग किया जाता है।क्या डेटा एन्नोटेशन नेमस्पेस में एनम मानों के लिए बॉक्स सत्यापनकर्ता है?
मैं एक डब्ल्यूसीएफ सर्विसेज विकसित कर रहा हूं जिसे विश्वास करने की आवश्यकता है कि कुछ enum के पास 0 के सभी enums के लिए डिफ़ॉल्ट मान के विपरीत एक मान दिया गया है। मैं एक यूनिट परीक्षण से शुरू करता हूं यह पता लगाने के लिए कि [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)
का उपयोग अपने यूनिट परीक्षण में किए गए ValidateObject(Object, ValidationContext)
के बजाय True
के बराबर अंतिम पैरामीटर के साथ करना सुनिश्चित करें।
मैं इसे इस्तेमाल कभी नहीं किया, इसलिए मुझे नहीं पता कि यह मानों की जांच करता है, लेकिन आप EnumDataTypeAttribute को आजमा सकते हैं: http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.enumdatatypeattribute%28v=vs.95%29 इसके लिए .aspx –