我试图将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#。我应该使用通用列表吗?
答案 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
的值,则为单引号分配)。这也可以与双指针相媲美。