繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM