无法获取托管类型的地址,获取其大小或声明其指针

时间:2019-05-02 14:07:15

标签: c# pointers

我正在尝试在c#中实现一个双链表,但是我从未使用过指针,也找不到解决方案。 我正在尝试创建将包含单个项目和指向相邻节点的指针的节点类。

// single elements in the list 
unsafe class Node { Node* previous}
{
    public int data;
    public Node *next;
    public Node *prev = *previous;
}

我一直在标题中看到错误,而且我不知道如何解决。

2 个答案:

答案 0 :(得分:3)

这里完全不需要未修饰的指针或Pending。因为unsafe是一个类,所以当您将Node用作参数,字段,变量等时-这是对Node实例的引用。这里的 reference 表示“托管指针”-即类似于指针,但具有完全的GC支持和类型安全性等。因此,您所需要做的只是Node

Node

更具体地说,您不能随便使用 unmanaged 指向C#中class Node { public int Data {get;set;} public Node Next {get;set;} // Next/Previous might want "private set" if public Node Previous {get;set;} // you are going to change them via methods } 的指针-class- isn不是你能做的事。您可以使用Node*来做到这一点,但是:您几乎可以肯定不应该。我希望这里的重点是使用托管指针,也就是引用,即struct,而不是Node

答案 1 :(得分:0)

正如CrowCoder所说的,您不应也不应在C#中使用此实现的指针。这段代码可以帮助您入门:

internal class LLNode {  
    internal int data;  
    internal LLNode prev;  
    internal LLNode next;  
    public LLNode (int d) {  
        data = d;  
        prev = null;  
        next = null;  
    }  
}