使用类型为String的Generic类并获取错误'string'必须是非抽象类型

时间:2014-08-19 13:13:41

标签: c# generics

我有一个简单的泛型类如下:

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()约束的方法。

显然,这是对方法的完全不同的调用

4 个答案:

答案 0 :(得分:10)

new约束

where T : new()

要求类型T具有公共默认构造函数:

  

new 约束指定泛型类声明中的任何类型参数都必须具有公共无参数构造函数。要使用新约束,类型不能是抽象的。

string没有。

尝试从

中删除where T : new()
public class DataResponse<T> where T : new()

答案 1 :(得分:3)

这是因为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; }
}

答案 2 :(得分:2)

  

新约束指定泛型类声明中的任何类型参数都必须具有公共无参数构造函数。要使用新约束,类型不能是抽象的。

String没有无参数构造函数。

http://msdn.microsoft.com/en-us/library/system.string(v=vs.110).aspx

答案 3 :(得分:2)

字符串不具有以下所需的公共参数less构造函数:new()和要使用新约束,该类型不能是抽象的。

供您参考:String Class