2017-05-23 71 views
1

我想将一个C++代码转换成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

你可以给出原始代码,以及你尝试过的代码细节,但是我建议找到指针周围,避免它,除非它是完全necesarry –

+0

显然,它正在像这样使用 MyClasses [subnum] - > MyMethod(); 这就是为什么我认为它应该是一个通用的列表。 –

+1

最直接的“转换”将是'var MyClasses = new MyClass [10];';但是你的实际情况可能比这更复杂,而在C#中,你更喜欢'List '而不是数组。 –

回答

0

在这种情况下,指针被用来说明一个spannable范围,如在环如下所示:

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

所以指针可能应该通过列表所替换,数组或IEnumerable<T>序列。

inner指针正在用于指向一个对象,所以应该用一个引用来替换它。

所以:除非有什么非常具体的C++代码是干什么的,你需要在这里:

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

注意,这只能通过解释看代码。还有其他可能的方式来谈论“双指针*;考虑这个ref例如:

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

这里obj是参照参考(为MyClass) - 一切是双解引用自动(或单如果你改变了obj的值,这个参数赋值也是可以和双指针相媲美的)