4

我想创建一个通用堆栈

我有一个节点类

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

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

并且可以像使用它一样

GenericNode<string> node = new GenericNode<string>("one")

但我不能使用它喜欢

GenericNode<int> node = new GenericNode<int>(1)

因为 int 不是引用类型(不是类),我使用 where T: class 但 List 也不是引用类型。

我该如何解决我的问题?

4

3 回答 3

8

不要使用任何一个structclass作为通用约束。然后,您可以使用其中任何一个。

于 2013-06-17T20:44:33.403 回答
7

Using the struct constraint (or class depending on which version of the question you look at) means that the type for T cannot be nullable and will throw an exception when you try to use <string>.

Removing it will allow you to do the steps you want.

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);
}
于 2013-06-17T20:46:32.923 回答
6

删除class约束:

public class GenericNode<T> /* where T : class*/

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

于 2013-06-17T20:44:28.510 回答