我正在使用Generic类和Constraint。以下是我的班级。
public class GenericList<T> where T : new()
{
private Node head;
// constructor
public GenericList()
{
head = null;
}
}
当我使用整数创建对象时,它可以正常工作
GenericList<int> list = new GenericList<int>();
但是当我尝试使用字符串时,它会给出编译时错误。
GenericList<string> list1 = new GenericList<string>();
'string'必须是具有公共无参数构造函数的非抽象类型,以便在泛型类型或方法'GenericTest.GenericList'中将其用作参数'T' 当我像任何自定义类一样传递引用参数时,它工作正常。
字符串有什么问题?
答案 0 :(得分:3)
String Class没有公共无参数构造函数 ..这就是new()
约束不适用于它的原因。
阅读Constraints on Type Parameters (C# Programming Guide):
其中T:new()
type参数必须具有公共无参数构造函数。什么时候 与其他约束一起使用时,new()约束必须是 最后指定。
答案 1 :(得分:2)
String
类型具有公共无参数构造函数是没有意义的,因为String
是不可变,这意味着如果String
具有此构造函数,那么它将必须创建一个空的字符串对象,这只是愚蠢的,因为创建后你无法改变它。