.NET 4 和Silverlight 中可以使用以下方法:
public static void Validate(this Entity entity) { // prepare the result var validationResults = new List<ValidationResult>(); // create a validation context var validationContext = new ValidationContext(entity, null, null); // validate Validator.TryValidateObject(entity, validationContext, validationResults); // reset the validation errors of the entity entity.ValidationErrors.Clear(); foreach (var error in validationResults) entity.ValidationErrors.Add(error); }
.NET 3.5中的方法:
public static class EntityValidator { public static IEnumerable<ErrorField> GetErrors(object instance) { var t = instance.GetType(); var typeDescriptor = new AssociatedMetadataTypeTypeDescriptionProvider(t).GetTypeDescriptor(t); return from prop in typeDescriptor.GetProperties().Cast<PropertyDescriptor>() from attribute in prop.Attributes.OfType<ValidationAttribute>() where !attribute.IsValid(prop.GetValue(instance)) select new ErrorField(prop.Name, attribute.FormatErrorMessage(string.Empty)); } } [Serializable] public class ErrorField { public string ID { get; set; } public string Msg { get; set; } public ErrorField(string id, string msg) { this.ID = id; this.Msg = msg; } }