【发布时间】:2014-08-19 13:13:41
【问题描述】:
我有一个简单的泛型类如下:
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() 约束的方法。
显然这是对方法的完全不同的调用
【问题讨论】:
-
为什么将 where T 设置为 new()?
-
根据docs,
System.Stringnot 有无参数构造函数。你在哪里看到的? -
类型字符串有一个无参数构造函数。不,它没有 - String Constructor
-
@Gandarez 我实际上已经添加了 T : new() 作为遇到错误并将其视为常见解决方案的结果。直到后来我才意识到 IDE 在错误的行上显示了错误。