为了账号安全,请及时绑定邮箱和手机立即绑定

转换泛型类中的数据错误

转换泛型类中的数据错误

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 关注
  • 196 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信