首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法获取托管类型的地址、大小或声明指针。

无法获取托管类型的地址、大小或声明指针。
EN

Stack Overflow用户
提问于 2019-05-02 14:07:14
回答 2查看 87关注 0票数 2

我试图在c#中实现一个双链接列表,但我以前从未使用过指针,也无法找到解决方案。我正在尝试创建节点类,它将保存指向相邻节点的单个项和指针。

代码语言:javascript
复制
// single elements in the list 
unsafe class Node { Node* previous}
{
    public int data;
    public Node *next;
    public Node *prev = *previous;
}

我不断地得到标题中的错误,我不知道如何修正它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-02 14:33:42

这里根本不需要未命名的指针或unsafe。因为Node是一个类,所以当您使用Node作为参数、字段、变量等时,这是对Node实例的引用。这里引用的意思是“托管指针”,即像指针一样,但是有完全的GC支持和类型安全性等等。所以您所需要的就是Node

代码语言:javascript
复制
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#中的Node* )--这根本不是您所能做的事情。您可以使用struct来实现这一点,但是:您几乎肯定不应该这样做。我希望这里的重点是使用托管指针,也就是引用,即Node,而不是Node*

票数 3
EN

Stack Overflow用户

发布于 2019-05-02 14:35:57

正如CrowCoder所述,对于此实现,您不应该也不应该在C#中使用指针。这段代码应该会让您开始:

代码语言:javascript
复制
internal class LLNode {  
    internal int data;  
    internal LLNode prev;  
    internal LLNode next;  
    public LLNode (int d) {  
        data = d;  
        prev = null;  
        next = null;  
    }  
}  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55954285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档