[英]Efficiently convert between equivalent structs in C#
我在两个使用等效结构的库之间进行通信。 例如:
struct MyVector {
public float x, y, z;
}
struct TheirVector {
public float x, y, z;
}
目前,我通过将每个成员复制到另一个成员的实例中来在这些类型之间“转换”。 知道 C# 如何在 memory 中存储结构,难道没有更有效的方法来使用指针吗?
另外,假设我有两个 arrays 这些等效结构:
MyVector[] array1; // (Length 1000)
TheirVector[] array2; // (Length 1000)
没有办法将memory的整个块从array1复制到array2吗? 或者更好的是,我可以将整个array1 视为array2 类型而不在memory 中创建副本吗?
我确定答案需要指针,但我只在 C++ 中使用过指针,不知道 C# 是如何实现它们的。
有没有人有任何关于如何实现这样的目标的例子?
提前致谢!
是的,如果您绝对 100% 确定它们具有相同的 memory 布局,您可以在它们之间进行强制转换。 这样做的首选方法(以避免过多的unsafe
/指针)是:spans。 例如:
var theirs = MemoryMarshal.Cast<MyVector, TheirVector>(array1);
这将theirs
作为Span<TheirVector>
提供,而无需复制任何实际数据。 跨度与数组/向量具有非常相似的 API,因此您希望工作的大多数事情:应该完全按照您的预期工作。 您只需使用不同的类型对相同的 memory 进行类型化引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.