.NET Core 5反射调用泛型方法时System.String违反T约束报错求解
问题原因
你定义的Parse<T>泛型方法添加了where T : new()的约束,该约束要求传入的泛型类型T必须拥有公共无参数构造函数。System.String类型没有公共无参数构造函数,无法满足约束要求,因此在调用MakeGenericMethod时会触发参数校验异常。
而int属于值类型,所有值类型都默认提供隐式的无参数构造函数,完全符合约束要求,所以替换为int时运行正常。
你代码里的无参构造调用完全是冗余逻辑:
T retVal = new T(); retVal = (T)tokenList[startPos].tokenData;
第一行实例化的对象直接被第二行的赋值覆盖,没有任何实际作用。
解决方案
直接删除上述冗余的new T()代码行,同时移除泛型方法定义里的where T : new()约束即可,修改后的泛型方法可以正常传入string作为泛型参数。
如果你确实有其他场景需要用到无参构造实例化T,可以保留约束,对string等不满足约束的类型单独做分支处理,不走通用的反射泛型调用路径即可。
内容的提问来源于stack exchange,提问作者Jeremy Farmer
相关产品推荐
相关产品推荐

