C# 可空和泛型

C# 可空和泛型,c#,generics,nullable,C#,Generics,Nullable,我正在尝试创建一个通用节点类,它可以包含任意数量的子节点、一个节点键字符串和一个可能为空或不为空的数据节点。但是,我在语法正确性方面遇到了问题,无法让它将泛型接受到泛型参数中,以便为null internal class TrieNode<E> { Nullable<E> Data; string Key; List<TrieNode<E>> Children; public TrieNode(E? data, s

我正在尝试创建一个通用节点类,它可以包含任意数量的子节点、一个节点键字符串和一个可能为空或不为空的数据节点。但是,我在语法正确性方面遇到了问题,无法让它将泛型接受到泛型参数中,以便为null

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?数据,字符串键)
{
数据=数据;
钥匙=钥匙;
Children=新列表();
}
}
在编译时,我得到以下错误消息:

类型“E”必须是不可为null的值类型,才能将其用作泛型类型或方法“System.nullable”中的参数“T”


有没有一种方法可以保证E是不可为null的类型,或者有其他方法可以解决这个问题?

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

您只需要:

internal class TrieNode<E> where E : struct
内部类三节点,其中E:struct

:struct
子句将
E
限制为值类型不包括
null
,这允许
null
E?
正常工作。

可以尝试内部类triode,其中E:struct

我认为可以为null的类型需要是值类型而不是引用类型(引用类型已经可以为null)