首页 > 解决方案 > 无法获取托管类型的地址、大小或声明指针

问题描述

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

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

我不断收到标题中的错误,我不知道如何解决它。

标签: c#pointers

解决方案


您根本不需要 unasnaged 指针或unsafe此处。因为Node是一个类,当您Node用作参数、字段、变量等时 - 这是对实例的引用。Node此处的引用表示“托管指针” - 即类似于指针,但具有完整的 GC 支持和类型安全等。所以您只需要Node

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
}

更具体地说,您不能轻易地将非托管指针指向classC# 中的 a - a Node*- 这根本不是您可以做的事情。你可以这样做struct,但是:你几乎肯定不应该这样做。我希望这里的重点是使用托管指针,也就是引用,即Node不是Node*


推荐阅读