![](/img/trans.png)
[英]Generic Class Loader: 'T' must be a non-abstract type with a public parameterless constructor
[英]Using Generic class with type String and getting error 'string' must be non-abstract type
我有一个简单的泛型类如下:
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'
更新我已经添加了T:new()来响应最初遇到问题。 删除它解决了它,因为它导致IDE突出显示实际给我问题的正确行。 导致错误的行是一个具有new()约束的方法。
显然它是一种完全不同的方法调用
new
约束
where T : new()
要求类型T
具有公共默认构造函数:
新约束指定泛型类声明中的任何类型参数都必须具有公共无参数构造函数。 要使用新约束,类型不能是抽象的。
string
没有。
尝试删除where T : new()
的位置
public class DataResponse<T> where T : new()
发生这种情况是因为String 没有以下所需的公共无参数构造函数: new() 。 你可以在这里确认String Class
您应该将代码修改为:
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没有公共参数less构造函数:new()和要使用新约束,类型不能是抽象的。
供您参考:String Class
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.