Есть ли в C # указатели? - PullRequest
0 голосов
/ 30 мая 2018

Как мне сделать что-то подобное в C #?

Код моего учителя в C ++ определяет объект того же типа, что и структура, в которой этот объект определен, поэтому логически, чтобы избежать StackOverFlowException (объекты могли бысоздавать и создавать другие) он использовал указатели.

Но я не знаю никаких указателей в C # для этого.

Как мне избежать StackOverflowException при определении объекта структуры в C #?

struct HeapNode<T>
{
    T Data;

    HeapNode<T> Right; // in C++ it would be HeapNode* Right
    HeapNode<T> Left;
}

Ответы [ 2 ]

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

Да, чертовски точно есть указатели в C #, но это называется небезопасным кодом, и вы не можете использовать их, если не указали, что это небезопасно.

Общие указатели не были разрешены, пока C # 7 не указал что-то, но теперь они разрешены, и код в вопросе может быть написан с использованием указателей.

Код в вопросе может быть переписан какниже:

unsafe struct HeapNode<T>
{
    T* Data;

    HeapNode<T>* Right; // in C++ it would be HeapNode* Right
    HeapNode<T>* Left;
}

При компиляции с включенной опцией / unsafe.

Обратите внимание, что я не пытался скомпилировать не тестировать код, но это отправная точка для идеи.

0 голосов
/ 30 мая 2018

Вы можете просто использовать класс, таким образом у вас будут ссылочные типы.

 public class Node<T>
 {
     public Node<T> Left { get; set; } 
     public Node<T> Right { get; set; } 
     public T Data { get; set; }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...