gpt4 book ai didi

c# - 如何将递归结构编码为 c sharp?

转载 作者:行者123 更新时间:2023-11-30 22:49:25 26 4
gpt4 key购买 nike

我有一个非托管结构,我想编码为 c sharp,它看起来基本上是这样的:

struct MyStruct{  
/* ... some stuff ... */
int numChilds;
MyStruct *childs;
}

我认为我必须编写一个自定义编码器,但我不确定如何进行。

最佳答案

当我不需要直接索引 child 时,我喜欢使用这样的设置:

struct MyStruct
{
/* ... some stuff ... */
int numChilds;
IntPtr childData;

public IEnumerable<MyStruct> Children
{
get
{
int elementSize = Marshal.SizeOf(typeof(MyStruct));
for (int i = 0; i < this.numChilds; i++)
{
IntPtr data = new IntPtr(this.childData.ToInt64() + elementSize * i);
MyStruct child = (MyStruct)Marshal.PtrToStructure(data, typeof(MyStruct));
yield return child;
}
}
}
}

如果您确实需要直接索引 child ,最简单的事情就是创建一个方法GetChild (如下所示)。更难的方法是创建一个实现 IList<MyStruct> 的帮助器/包装器类. Children 将返回一个实例属性,它的内部将通过调用 GetChild 来工作方法。如果需要,这将作为练习留给读者。

public MyStruct GetChild(int index)
{
if (index < 0)
throw new ArgumentOutOfRangeException("index", "The index must be >= 0.");
if (index >= this.numChilds)
throw new ArgumentException("The index must be less than the number of children", "index");

int elementSize = Marshal.SizeOf(typeof(MyStruct));
IntPtr data = new IntPtr(childData.ToInt64() + elementSize * index);
MyStruct child = (MyStruct)Marshal.PtrToStructure(data, typeof(MyStruct));
return child;
}

关于c# - 如何将递归结构编码为 c sharp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1150194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com