我如何在C#中制作这样的作品?
我老师在C ++中的代码定义了一个对象,该对象的类型与定义此对象的结构相同,因此逻辑上要避免StackOverFlowException(对象将创建并创建其他对象),他使用指针。
但我不知道C#中的任何指针都可以做到这一点。
在C#中定义结构对象时如何避免StackOverflowException?
struct HeapNode<T>
{
T Data;
HeapNode<T> Right; // in C++ it would be HeapNode* Right
HeapNode<T> Left;
}
答案 0 :(得分:0)
是的,该死的肯定是C#中的指针,但这被称为不安全代码,并且在不指定时就不能使用它们,那是不安全的。
在C#7指向某些东西之前,不允许使用通用指针,但是现在允许使用通用指针,并且可以使用指针编写问题中的代码。
问题中的代码可以如下重写:
unsafe struct HeapNode<T>
{
T* Data;
HeapNode<T>* Right; // in C++ it would be HeapNode* Right
HeapNode<T>* Left;
}
启用/ unsafe选项进行编译时。
请注意,我没有尝试编译而不测试代码,但这是这个想法的起点。
答案 1 :(得分:-1)
你可以使用一个类,这样你就会有引用类型。
public class Node<T>
{
public Node<T> Left { get; set; }
public Node<T> Right { get; set; }
public T Data { get; set; }
}