亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

轉換泛型類中的數據錯誤

轉換泛型類中的數據錯誤

C#
DIEA 2021-06-28 17:19:55
我有這個通用節點類:class Node<E>    {        private E data;        private Node<E> link;        public Node(E d)        {            data = d;            link = null;        }        public Node(E d, Node<E> l)        {            data = d;            link = l;        }        public void AddNodeAfter(E d)        {            link = new Node<E>(d, link);        }    }我的主要課程有兩行:Node<int> n1 = new Node<int>(100);n1.AddNodeAfter(4.4); //error here這條線n1.AddNodeAfter(4.4)給了我一個Argument 1: cannot convert from 'double' to 'int'我不完全理解的錯誤。據我所知,最后一個節點包含一個int作為它data的節點,但該節點是通用的,所以我假設下一個節點是什么并不重要,因為data可以從一個節點改變到另一個節點。但顯然我錯過了一些東西。所以我的問題是為什么我會在泛型類中收到這個轉換錯誤?
查看完整描述

3 回答

?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

你沒有錯過任何東西。你定義了你的泛型類型int并且你傳遞double給AddAfterNode方法


您的方法將變為:


 public void AddNodeAfter(int d)

 {

     link = new Node<int>(d, link);

 }

所以你不能通過除了 int


如果您希望代碼正常工作,只需更改int為object.


還有更好的方法可以做到這一點。


查看完整回答
反對 回復 2021-07-11
?
慕后森

TA貢獻1802條經驗 獲得超5個贊

泛型用于為類創建一種“模板”,這是一種參數化類使用的特定類型的方法。Node<int>在本質上創建一個基于一個新的類Node<E>,所有E的與取代的int,所以類型linkNode<int>你的n1實例。您也可以自由創建Node<double>實例,只是不能根據您的類型定義將它們鏈接在一起。

如果你想在你的節點中真正容納任何類型的對象,你需要有一個更靈活的類型,比如Object你的節點數據,如果你需要獲取數據的類型,請使用反射之類的東西。


查看完整回答
反對 回復 2021-07-11
?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

Node<E>是泛型類,沒有泛型對象的概念。new Node<int>()是帶整數的類型化對象。它只能接受可以隱式轉換為整數的類型。

查看完整回答
反對 回復 2021-07-11
  • 3 回答
  • 0 關注
  • 226 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號