我有一个类Validator<T>
和从中继承的许多其他类,如:TagValidator : Validator<Tag>
。
假设我想创建一个ModelValidator
类,它存储从Validator<T>
继承的所有类,并在执行ModelValidator.Validate<T>(T model)
时运行特定的类
有没有一种方法可以将具有泛型类型的类存储在单个数组或字典中?
我觉得这并不像评论所说的那么难。
这种东西管用吗?
void Main()
{
var mv = new ModelValidator();
mv.AddValidator(new TagValidator());
mv.AddValidator(new FooValidator());
var tag = new Tag();
mv.Validate(tag);
}
public class ModelValidator
{
private List<object> _validators = new List<object>();
public void AddValidator<T>(Validator<T> validator)
{
_validators.Add(validator);
}
public void Validate<T>(T model)
{
foreach (Validator<T> validator in _validators.OfType<Validator<T>>())
{
validator.Validate(model);
}
}
}
public abstract class Validator<T>
{
public virtual void Validate(T model) { }
}
public class TagValidator : Validator<Tag> { }
public class FooValidator : Validator<Foo> { }
public class Tag { }
public class Foo { }