可空和泛型

时间:2011-02-03 06:03:39

标签: c# generics nullable

我正在尝试创建一个通用节点类,它可以容纳任意数量的子节点,节点键的字符串和可能为null但可能不为null的数据节点。但是,我在使语法正确使它接受泛型为Nullable的泛型参数时遇到了问题。

internal class TrieNode<E>
{
    Nullable<E> Data;
    string Key;
    List<TrieNode<E>> Children;

    public TrieNode(E? data, string key)
    {
        Data = data;
        Key = key;
        Children = new List<TrieNode<E>>();
    }
}

在编译时,我得到以下错误消息:

  

类型'E'必须是非可空值类型才能在泛型类型或方法'System.Nullable'中将其用作参数'T'

有没有办法保证E是非可空类型,或者其他方式?

3 个答案:

答案 0 :(得分:9)

你只需要:

internal class TrieNode<E> where E : struct

: struct子句将E限制为值排除Nullable<> 的值,这样Nullable<E>E?可以正常工作。

答案 1 :(得分:0)

也许尝试内部类TrieNode,其中E:struct

认为 Nullable类型需要是值类型而不是引用类型(引用类型已经可以为空)

答案 2 :(得分:-2)

为什么不声明节点使用object?对象可以引用任何数据类型,也可以为null。