【发布时间】:2021-03-03 10:58:41
【问题描述】:
我在两个使用等效结构的库之间进行通信。例如:
struct MyVector {
public float x, y, z;
}
struct TheirVector {
public float x, y, z;
}
目前,我通过将每个成员复制到另一个成员的实例中来在这些类型之间“转换”。了解了 C# 如何将结构存储在内存中,难道没有更有效的方法来使用指针吗?
另外,假设我有两个由这些等效结构组成的数组:
MyVector[] array1; // (Length 1000)
TheirVector[] array2; // (Length 1000)
没有办法将整个内存块从array1复制到array2吗?或者更好的是,我可以将整个 array1 视为 array2 类型而不在内存中创建副本吗?
我确定答案需要指针,但我只在 C++ 中使用过指针,不知道 C# 是如何实现它们的。
有没有人有任何例子说明如何实现这样的目标?
提前致谢!
【问题讨论】:
-
你能使用具有显式布局的联合结构吗?
-
@Charlieface 我不熟悉联合结构。他们具体是做什么的?
-
具有
[StructLayout(LayoutKind.Explicit)]属性的结构体和其他结构体的两个字段,每个字段都具有[FieldOffset(0)]。您需要确保两个内部结构的布局相互匹配
标签: c# pointers struct casting copy