[英]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.