object obj = new Customer();
Type Ty = obj.GetType();
Validator<Ty> cusValidator = valFactory.CreateValidator<Ty>();
在这里出错
是否可以?
是的。但不适用于编译时类型检查。您的运行时类型Ty
不是有效的编译时类型参数。可以通过反射来完成,使用MakeGenericType
没有编译时检查安全的方法:
object obj = new Customer();
Type ty = obj.GetType();
MethodInfo validatorFactory = valFactory.GetType()
.GetMethod("CreateValidator")
.MakeGenericType(ty);
var cusValidator = validatorFactory.Invoke(valFactory, null);
但是你不能输入类似的东西Validator<ty>
——你必须使用var
or dynamic
。请注意,现在类型是对象:
// true:
cusValidator.GetType() == typeof(object)
您可以引入一个非泛型 Validator 接口,以允许cusValidator
在您插入所有Customer
(等等)类的基类的位置调用方法来验证它。你不能投射到Validator<ty>
.