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