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

Art*_*m G 4 c# generics int reference class

我想创建一个通用堆栈

我有一个Node类

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

    public GenericNode()
    { 
    }
    public GenericNode(T item)
    {
        this.item = item;
    }
  }
Run Code Online (Sandbox Code Playgroud)

并且可以使用它

GenericNode<string> node = new GenericNode<string>("one")
Run Code Online (Sandbox Code Playgroud)

但我不能用它喜欢

GenericNode<int> node = new GenericNode<int>(1)
Run Code Online (Sandbox Code Playgroud)

因为int不是引用类型(不是类)而我使用的地方是T:class但是List也不是引用类型.

我该如何解决我的问题?

Ser*_*rvy 8

不要使用任何一个structclass作为通用约束.然后你可以使用其中之一.


Tra*_*s J 7

使用struct约束(或class取决于您查看的问题的版本)意味着类型for T不能为空,并在您尝试使用时抛出异常<string>.

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

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);
}
Run Code Online (Sandbox Code Playgroud)


Ree*_*sey 6

删除class约束:

public class GenericNode<T> /* where T : class*/
Run Code Online (Sandbox Code Playgroud)

如果省略该约束,它将允许您的类使用任何类型,无论它是值还是引用类型.