C#泛型方法含new关键字的多约束语法错误,求正确写法
解决泛型方法中构造函数约束的编译错误
你这是在泛型约束的语法细节上踩了小坑,我来帮你把问题理清楚:
先看你写的代码片段:
private void GetData<T, OType>(string url, string token1, string token2, Action<T, SqlConnection, SqlTransaction> bulkInsert, string user = null, string pwd = null) where T : JsonElements<OType>, new where OType : class { var thing = T(); }
编译提示) expected,问题出在两个关键地方:
1. new约束的语法不完整
C#里规定,无参构造函数约束必须写成new(),你漏了后面的括号;同时多个约束之间要用逗号分隔,这里的new后面直接接where也不符合语法要求。
2. 泛型类型实例化的写法错误
你写的var thing = T();是不正确的,创建泛型类型的实例必须用new T()的标准语法。
给你修正后的完整代码:
private void GetData<T, OType>(string url, string token1, string token2, Action<T, SqlConnection, SqlTransaction> bulkInsert, string user = null, string pwd = null) where T : JsonElements<OType>, new() where OType : class { var thing = new T(); // 这里可以继续写你的后续逻辑 }
再给你划几个需要注意的点:
- 泛型约束的顺序:先写基类/接口约束(比如
JsonElements<OType>),再写new()构造函数约束,这个顺序不能乱 new()是固定语法,括号绝对不能省略,它用来确保类型T拥有公共的无参构造函数- 实例化泛型对象必须用
new T(),这是C#创建对象的标准方式
这样修改之后,那个编译错误就应该消失啦~
内容的提问来源于stack exchange,提问作者Gargoyle
相关产品推荐
相关产品推荐

