如题 初学 c#语言,想用 C#语言实现一个泛型类型单链表 有如下代码:
class LinkedList<Anytype> {
public Node<Anytype> Head;
public Anytype getFirst () {
return this.Head?.Data;
}
}
在 getFirst 方法中,我使用了?.操作符,出现了如下错误: "运算符“?”无法应用于“Anytype”类型的操作数", 我找不到为什么这里不能使用这个操作符的原因,是因为 Node 是泛型类型的原因吗? 烦请前辈解答。
1
forgottencoast 2020-06-14 18:14:24 +08:00
这句“return this.Head?.Data;”
等同于“return this.Head == null ? null : Head.Data;” 因为 Anytype 有可能是 struct,而 struct 是不可为 null 的,所以不能在 this.Head == null 成立的分支把 null 作为返回值。 因此,这里不能用?.操作符。 变通的改法是 return this.Head == null ? default(Anytype) : Head.Data; 但是没有节点仍然返回值是不对的,这样无法区分是没有节点还是节点的值是默认值。 所以,.NetFramework 返回的是 LinkedListNode<T>,一个 class,可为空。 另外:指导手册建议不用 Anytype 这种很长的写法,就是 T 。 以及 getFirst,会写出:public LinkedListNode<T> First { get; } |
2
bbsabc2 2020-09-17 07:19:40 +08:00
空集合 的 First 方法一般 会抛出异常,
没有异常的版本使用 FirstOrDefault 方法 |