C# 中是否有任何指针?



如何在 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; }
}

最新更新