转换泛型类中的数据错误

时间:2018-05-29 17:52:14

标签: c# generics nodes

我有这个通用节点类:

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,但该节点是通用的,所以我假设自{{{1}以来下一个节点是什么并不重要1}}可以从节点更改为节点。

但显然我错过了一些东西。所以我的问题是为什么我在泛型类中得到这个转换错误?

谢谢!

3 个答案:

答案 0 :(得分:3)

你没有遗漏任何东西。您将通用类型定义为int,并且您将double传递给AddAfterNode方法

您的方法将变为:

 public void AddNodeAfter(int d)
 {
     link = new Node<int>(d, link);
 }

所以你不能传递int

以外的任何内容

如果您希望代码正常运行,只需将int更改为object

还有更好的方法可以做到这一点。

答案 1 :(得分:1)

泛型用于创建一种&#34;模板&#34;对于类,一种参数化类所使用的特定类型的方法。 Node<int>本质上会基于Node<E>创建一个新类,其中所有Eint替换,因此link的类型为{您的Node<int>实例{1}}。您也可以自由创建n1个实例,根据您的类型定义,您无法将它们链接在一起。

如果您想在节点中真正容纳任何类型的对象,您需要拥有更灵活的类型,例如Node<double>用于您的节点数据并使用某些东西如果你需要了解数据的类型,就像反思一样。

答案 2 :(得分:1)

Node<E>是一个泛型类,没有泛型对象的概念。 new Node<int>()是带整数的类型化对象。它只能接受可以隐式转换为整数的类型。

请参阅Implicit Conversions on the Predefined Types