Невозможно получить адрес, получить размер или объявить указатель на управляемый тип - PullRequest
2 голосов
/ 02 мая 2019

Я пытаюсь реализовать двойной связанный список в c #, но я никогда раньше не использовал указатели и не могу найти решение.Я пытаюсь создать класс узла, который будет содержать один элемент и указатели на соседние узлы.

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

Я получаю сообщение об ошибке в заголовке и не знаю, как его исправить.

Ответы [ 2 ]

3 голосов
/ 02 мая 2019

Вам не нужны незарегистрированные указатели или 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 # - Node* - что просто - это не то, что вы можете делать . Вы можете сделать это с struct, но: вы почти наверняка не должны . Я ожидаю, что смысл в том, чтобы использовать управляемые указатели, иначе ссылки, т.е. Node, а не Node*.

0 голосов
/ 02 мая 2019

Как сказал CrowCoder, вы не должны и не должны использовать указатели в C # для этой реализации. Этот код должен помочь вам начать:

internal class LLNode {  
    internal int data;  
    internal LLNode prev;  
    internal LLNode next;  
    public LLNode (int d) {  
        data = d;  
        prev = null;  
        next = null;  
    }  
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...