C# 如何创建一个泛型类型,其中T也可以是int32,但不仅仅是一个类

C# 如何创建一个泛型类型,其中T也可以是int32,但不仅仅是一个类,c#,class,generics,reference,int,C#,Class,Generics,Reference,Int,我想创建一个通用堆栈 我有一个节点类 public class GenericNode<T> where T : class { public T item; public GenericNode<T> next; public GenericNode() { } public GenericNode(T item) { this.item = item; } } 公共类Gene

我想创建一个通用堆栈

我有一个节点类

 public class GenericNode<T> where T : class
 {
    public T item;
    public GenericNode<T> next;

    public GenericNode()
    { 
    }
    public GenericNode(T item)
    {
        this.item = item;
    }
  }
公共类GenericNode,其中T:class
{
公共交通项目;
公共通用节点下一步;
公共GenericNode()
{ 
}
公共通用节点(T项)
{
this.item=项目;
}
}
并且可以像这样使用它

GenericNode<string> node = new GenericNode<string>("one")
GenericNode节点=新的GenericNode(“一个”)
但是我不能像这样使用它

GenericNode<int> node = new GenericNode<int>(1)
GenericNode节点=新的GenericNode(1)
因为int不是引用类型(不是类),我使用where T:class 但列表也不是引用类型


如何解决问题?

删除
约束:

public class GenericNode<T> /* where T : class*/
公共类GenericNode/*其中T:class*/

如果您取消该约束,它将允许您的类处理任何类型,无论是值类型还是引用类型。

不要将
struct
class
用作通用约束。然后可以使用。

使用
struct
约束(或
,具体取决于所查看问题的版本),这意味着
T
的类型不能为空,并且在尝试使用
时将引发异常

删除它将允许您执行所需的步骤

public class GenericNode<T> where T : IConvertible
{
 public T item;
 public GenericNode<T> next;

 public GenericNode()
 { 
 }
 public GenericNode(T item)
 {
    this.item = item;
 }
}

void Main()
{
 GenericNode<string> node = new GenericNode<string>("one");
 GenericNode<int> node2 = new GenericNode<int>(1);
}
公共类GenericNode,其中T:IConvertible
{
公共交通项目;
公共通用节点下一步;
公共GenericNode()
{ 
}
公共通用节点(T项)
{
this.item=项目;
}
}
void Main()
{
GenericNode=新的GenericNode(“一”);
GenericNode2=新的GenericNode(1);
}

第4行是一个无限循环--编辑:无需担心。错误的语言>>@Magtheridon96怎么会这样?我觉得很好。对于一个类来说,引用同一类型的另一个实例是非常合适的。这是一个非常有效的链表实现。@天哪,我用[c++]tag>搜索时检索到了这个问题。对不起,这是我的错误,而且是深夜。。。你的回答还可以!