Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 泛型类与约束_C#_.net_String_Generics - Fatal编程技术网

C# 泛型类与约束

C# 泛型类与约束,c#,.net,string,generics,C#,.net,String,Generics,我正在使用泛型类和约束。下面是我的课 public class GenericList<T> where T : new() { private Node head; // constructor public GenericList() { head = null; } } 公共类泛型列表,其中T:new() { 专用节点头; //建造师 公共通用列表(

我正在使用泛型类和约束。下面是我的课

public class GenericList<T> where T : new()
    {

        private Node head;

        // constructor 
        public GenericList()
        {
            head = null;
        }

    }
公共类泛型列表,其中T:new()
{
专用节点头;
//建造师
公共通用列表()
{
head=null;
}
}
当我用integer创建对象时,效果很好

GenericList<int> list = new GenericList<int>();
GenericList list=new GenericList();
但当我尝试使用字符串时,它会给我以下编译时错误

GenericList<string> list1 = new GenericList<string>();
genericlist1=新建GenericList();
“string”必须是具有公共无参数构造函数的非抽象类型,才能将其用作泛型类型或方法“GenericTest.GenericList”中的参数“T” 而且,当我像任何自定义类一样传递引用参数时,它也可以正常工作

字符串有什么问题?

没有公共的无参数构造函数。。这就是为什么
new()
约束不适用于它的原因

阅读:

其中T:new()

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

没有公共无参数构造函数。。这就是为什么
new()
约束不适用于它的原因

阅读:

其中T:new()

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


String
类型具有公共无参数构造函数是毫无意义的,因为
String
是不可变的,这意味着如果
String
具有此构造函数,则必须创建一个空字符串对象,这太愚蠢了,因为在创建之后您不能更改它。

对于
String
类型来说,使用公共无参数构造函数是毫无意义的,因为
String
是不可变的,这意味着如果
String
将使用此构造函数,那么它将不得不创建一个空字符串对象,这太愚蠢了,因为在创建之后,您无法更改它。

Konstantin已经解释了它失败的原因,但是为什么您要从T开始呢?您想何时调用
new T()
?这就是约束启用的全部内容。这些都不能回答为什么需要无参数构造函数约束。同样,您希望何时在
genericslist
中调用
新T()
?Konstantin已经解释了它失败的原因-但是为什么要从T开始呢?您想何时调用
new T()
?这就是约束启用的全部内容。这些都不能回答为什么需要无参数构造函数约束。同样,您希望何时在
genericslist
中调用
new T()