假设您有两个具有完全相同内存布局的结构。是否可以在C#/ .NET中从一个到另一个进行非常快速的未经检查的内存转换?
//my code base
[StructLayout(LayoutKind.Sequential)]
public struct VectorA
{
float x;
float y;
float z;
}
//defined by a third party library
[StructLayout(LayoutKind.Sequential)]
public struct VectorB
{
float a;
float b;
float c;
}
//somewhere else in my code
var vectorA = new VectorA();
//then calling a method from the library
MethodFromThirdPartyLibrary((VectorB)vectorA); //compiler error
当然,作为一种分配数据字段并在内存中创建新副本的方法,它应该更快。
另外:3d矢量只是一个例子,矩阵的问题是16个浮点数和Vector2,Vector4,......
编辑:使用更多评论和更好的使用示例改进代码。