1

我正在使用通用类和约束。以下是我的课。

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>();

“字符串”必须是具有公共无参数构造函数的非抽象类型,以便将其用作泛型类型或方法“GenericTest.GenericList”中的参数“T”,当我像任何自定义类一样传递引用参数时,它也可以正常工作。

字符串有什么问题?

4

2 回答 2

3

字符串类没有公共无参数构造函数..这就是new()约束不适用于它的原因。

阅读类型参数的约束(C# 编程指南)

其中T:新()

类型参数必须有一个公共的无参数构造函数。当与其他约束一起使用时,必须最后指定 new() 约束。

于 2012-11-30T07:04:13.287 回答
2

String类型拥有公共无参数构造函数是没有意义的,因为String它是不可变的,这意味着如果String有这个构造函数,那么它必须创建一个空字符串对象,这很愚蠢,因为创建后你不能更改它。

于 2012-11-30T07:32:14.643 回答