-1
object obj = new Customer();
Type Ty = obj.GetType();
Validator<Ty> cusValidator = valFactory.CreateValidator<Ty>();

在这里出错

是否可以?

4

1 回答 1

2

是的。但不适用于编译时类型检查。您的运行时类型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>——你必须使用varor dynamic。请注意,现在类型是对象:

// true:
cusValidator.GetType() == typeof(object)

您可以引入一个非泛型 Validator 接口,以允许cusValidator在您插入所有Customer(等等)类的基类的位置调用方法来验证它。你不能投射到Validator<ty>.

于 2013-04-05T12:06:42.193 回答