C# 来自类的DataAnnotations验证

C# 来自类的DataAnnotations验证,c#,data-annotations,C#,Data Annotations,我在一个纯C应用程序的项目中使用DataAnnotations,根据DataAnnotations属性验证我的模型/文档的最佳方法是什么?不是我,而是我的朋友Steve Sanderson: internal static class DataAnnotationsValidationRunner { public static IEnumerable<ErrorInfo> GetErrors(object instance) { return fro

我在一个纯C应用程序的项目中使用DataAnnotations,根据DataAnnotations属性验证我的模型/文档的最佳方法是什么?

不是我,而是我的朋友Steve Sanderson:

internal static class DataAnnotationsValidationRunner
{
    public static IEnumerable<ErrorInfo> GetErrors(object instance)
    {
        return from prop in TypeDescriptor.GetProperties(instance).Cast<PropertyDescriptor>()
               from attribute in prop.Attributes.OfType<ValidationAttribute>()
               where !attribute.IsValid(prop.GetValue(instance))
               select new ErrorInfo(prop.Name, attribute.FormatErrorMessage(string.Empty), instance);
    }
}
内部静态类DataAnnotationsValidationRunner
{
公共静态IEnumerable GetErrors(对象实例)
{
从TypeDescriptor.GetProperties(instance.Cast()中的prop返回
来自类型()的prop.Attributes.of中的属性
其中!attribute.IsValid(prop.GetValue(实例))
选择新的ErrorInfo(prop.Name,attribute.FormatErrorMessage(string.Empty),instance);
}
}
例如,如果希望[DataType(DataType.EmailAddress)]实际验证电子邮件地址,或者希望支持[MetadataType]属性,则可能需要增强此功能。

这是C#4中的内置功能

var result=newlist();
bool valid=Validator.TryValidateObject(车辆,新的ValidationContext(车辆,null,null),结果);

这还将为您提供验证的详细信息。

这对我来说适用于除数据类型之外的所有属性。e、 g.
[DataType(DataType.EmailAddress)]公共对象DataTypeTest{get;set;}
知道为什么吗?
var result = new List<ValidationResult>();
bool valid = Validator.TryValidateObject(Vehicle, new ValidationContext(Vehicle, null, null), result);