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