跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • C#NULL 检查运算符(?.)和泛型
未分類
5 6 月 2020

C#NULL 检查运算符(?.)和泛型

C#NULL 检查运算符(?.)和泛型

資深大佬 : wuliiqq 11

如题 初学 c#语言,想用 C#语言实现一个泛型类型单链表 有如下代码:

class LinkedList<Anytype> {

public Node<Anytype> Head;  public Anytype getFirst () {   return this.Head?.Data; } 

}

在 getFirst 方法中,我使用了?.操作符,出现了如下错误: “运算符“?”无法应用于“Anytype”类型的操作数”, 我找不到为什么这里不能使用这个操作符的原因,是因为 Node 是泛型类型的原因吗? 烦请前辈解答。

大佬有話說 (1)

  • 資深大佬 : forgottencoast

    这句“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; }

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具