c# - 无法获取托管类型的地址、大小或声明指针
问题描述
我正在尝试在 C# 中实现一个双链表,但我以前从未使用过指针并且找不到解决方案。我正在尝试创建节点类,它将包含一个项目和指向相邻节点的指针。
// single elements in the list
unsafe class Node { Node* previous}
{
public int data;
public Node *next;
public Node *prev = *previous;
}
我不断收到标题中的错误,我不知道如何解决它。
解决方案
您根本不需要 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
}
更具体地说,您不能轻易地将非托管指针指向class
C# 中的 a - a Node*
- 这根本不是您可以做的事情。你可以这样做struct
,但是:你几乎肯定不应该这样做。我希望这里的重点是使用托管指针,也就是引用,即Node
不是Node*
。
推荐阅读
- c++ - 如何在 Windows 上嵌入 v8?
- python - 为什么 apispec 验证在类似于 Python Flask API 后端的文档示例的格式上失败?
- python - 无法使用 pip3 安装 pycares
- asp.net - 如何在 asp.net 核心中使用 AJAX 从操作方法中获取数据?
- tizen - 如何向自定义主题发送信号?
- c++ - 如何在抽象超类的子类中重载 operator+?
- webpack - 'mode' 选项没有被设置,webpack 将回退到 'production' 这个值。字段 'browser' 不包含有效的别名配置
- rust - NEP-141 实施
- c - 数组分配的 GCC 编译错误
- webhooks - curl: (7) 无法连接到 localhost 端口 443:连接被拒绝