使用String类型的泛型类并得到错误'String '必须是非抽象类型
本文关键字:类型 String 抽象 抽象类 是非 错误 泛型类 使用 | 更新日期: 2023-09-27 18:18:35
我有一个简单的泛型类,如下:
public class DataResponse<T> where T : new()
{
public DataResponse()
{
this.Data = new List<T>();
IsSuccessful = true;
}
public bool IsSuccessful { get; set; }
public string[] ErrorMessages { get; set; }
public List<T> Data { get; set; }
}
对于我使用的每个自定义类型都可以很好地工作,但是在一个实例中,我有一个数据集合是一个字段。而不是用一个字段创建自定义类,我将使类型字符串。但是这样做会返回错误:
var response = new DataResponse<String>();
'string'必须是具有公共无参数构造函数的非抽象类型,以便在泛型类型或'DataResponse'方法中将其用作参数'T'
更新为了应对最初遇到的问题,我添加了where T: new()。删除它解决了这个问题,因为它导致IDE突出显示了实际给我问题的正确行。导致错误的行是一个具有new()约束的方法。
显然这是一个完全不同的方法调用
new
约束
where T : new()
要求类型T
具有公共默认构造函数:
new约束指定泛型类声明中的任何类型实参必须具有公共无参数构造函数。要使用新约束,类型不能是抽象的。
string
不存在。
尝试从
中删除where T : new()
public class DataResponse<T> where T : new()
这是因为String 没有:new()所要求的公共无参数构造函数。你可以在这里确认字符串类
你应该这样修改代码:
public class DataResponse<T>
{
public DataResponse()
{
this.Data = new List<T>();
IsSuccessful = true;
}
public bool IsSuccessful { get; set; }
public string[] ErrorMessages { get; set; }
public List<T> Data { get; set; }
}
新的约束指定泛型类声明中的任何类型实参必须具有公共无参数构造函数。要使用新的约束,类型不能是抽象的。
String没有无参数构造函数。
http://msdn.microsoft.com/en-us/library/system.string (v = vs.110) . aspx
String没有公共无参数构造函数,这是:new()和使用新约束所必需的,类型不能是抽象的。
供参考:String Class
- http://msdn.microsoft.com/en-us/library/system.string%28v=vs.110%29.aspx
- http://www.tutorialspoint.com/csharp/csharp_strings.htm