什么是c#中的双指针等价物?

时间:2017-05-23 12:38:42

标签: c# c++ migration pointer-to-pointer

我试图将c ++代码转换为c#,但我遇到了一个双指针。我想知道如何在c#中实现双指针?

如果我说,

MyClass **MyClasses;

并且它已经像这样初始化了。

MyClasses = new MyClass*[ClassNums];

在类中的另一个函数中,每个子项都在循环中初始化。

for(num = 0; num < classnum; num++)
{
    MyClasses[subnum] = new MyClass();
}

这个双指针就是这样使用的。

MyClasses[subnum]->MyMethod();

如何将其转换为c#?我试图使用MyClasses[]的数组,但我不太确定。此外,我无法测试这个,因为它来自静态库,并且使用它的组件尚未转换为c#。我应该使用通用列表吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下,外部指针用于说明可跨越范围,如下面的循环所示:

for(num = 0; num < classnum; num++)
{
    MyClasses[subnum] = new MyClass();
}

因此外部指针可能应该被列表,数组或IEnumerable<T>序列替换。

内部指针用于指向对象,因此应该用引用替换。

所以:除非C ++代码正在做某些非常具体的,否则你需要的是:

MyClass[] arr = ...
...
for(int i = 0, i < arr.Length ; i++)
{
    arr[i] = new MyClass();
}
...
arr[i].MyMethod();

请注意,这只能通过查看代码来解释。还有其他可能的方式来讨论&#34;双指针*;考虑这个ref示例:

void SomeMethod(ref MyClass obj) {...}

此处obj是对引用(对MyClass)的引用 - 所有内容都自动进行双重引用(如果更改obj的值,则为单引号分配)。这也可以与双指针相媲美。