这是代码:
public interface IValidator<T>
{
bool IsValid(T obj);
}
public class OrderValidator: IValidator<Order>
{
// ...
}
public class BaseEntity
{
}
public class Order: BaseEntity
{
}
Run Code Online (Sandbox Code Playgroud)
问题是我做不到:
var validator = new OrderValidator();
// this line throws because type can't be converted
var baseValidator = (IValidator<BaseEntity>)validator;
// all this is because I need a list with IValidator<Order>, IValidator<BaseOrder>, etc.
IList<IValidator<BaseEntity>> allValidators = ...
Run Code Online (Sandbox Code Playgroud)
如何获取并存储基础T的所有IValidator <T>实现的列表 - 比如BaseEntity?目前我做的是非通用的IValidator,接受"对象obj",但它不好,不是类型安全的.
有趣的是C#允许编译:
var test = (IValidator<BaseEntity>)new OrderValidator();
Run Code Online (Sandbox Code Playgroud)
但在运行时失败了
Unable to cast …Run Code Online (Sandbox Code Playgroud)