【发布时间】:2020-07-14 18:25:26
【问题描述】:
我有一个类 Validator<T> 和许多其他继承自它的类,例如:TagValidator : Validator<Tag>。
假设我想创建一个 ModelValidator 类来存储从 Validator<T> 继承的所有类,并在我执行 ModelValidator.Validate<T>(T model) 时运行特定的类
有没有办法将泛型类型的类存储在单个数组或字典中?
【问题讨论】:
-
请分享minimal reproducible example,以便我们看到您尝试存储的两种不同的东西。
-
您可以定义一个非泛型基类
Validator,然后有一个Dictionary<Type, Validator>并执行(Validator<T>)dict[typeof(T)]。或者循环通过Validator[]类型的数组测试is Validator<T>。或者给你的Validator类一个TryValidate(object)方法,并尝试使用所有验证器进行验证 -
@JCode
AbstractValidator<T>实现IValidator<T>实现IValidator,所以IValidator是您的非泛型基类型。IValidator有一些 useful methods you could use -
@JCode 我们已经讨论过这个问题:你将不得不投射。查看 Enigmativity 的答案
-
@JCode - 你无法避免强制转换。但是强制转换是最快的操作之一,因为它几乎是在编译时完成的。并且在可能的情况下,编译器会对其进行优化。