[英]Initialize array of immutable structs in C# for any number of elements
在C#4.0中,當在編譯時未定義元素數時,如何初始化不可變數組。
例如,具有以下結構:
struct MeshVertex
{
public readonly Vector3 Position;
public readonly Vector3 Normal;
public readonly Color Color;
public readonly Vector2 UV;
}
struct RenderVertex
{
public readonly Vector4 Position;
public readonly Vector4 Normal;
public readonly Vector2 UV;
public RenderVertex(MeshVertex vertex)
{
Position = vertex.Position;
Normal = vertex.Normal;
UV = vertex.UV;
}
}
我有一個MeshVertex數組,我需要將其轉換為RenderVertex數組,但我只能看到以下替代方案:
創建一個列表,然后迭代每個MeshVertex並調用ToArray()。 這將效率較低。
// mesh.Vertices is an array of MeshVertex List<RenderVertex> vertices = new List<RenderVertex>(); foreach (MeshVertex vertex in mesh.Vertices) vertices.Add(new RenderVertex(vertex)); Buffer.Create(device, BindFlags.VertexBuffer, vertices.ToArray())
刪除只讀數組並使用可變數組,盡管分配這些結構后將不再需要更改它們。 這違反了我真正同意的不變數組約定。
還有其他方法可以將它們保留為不可變結構,而不必分配其他存儲來創建目標數組嗎?
即使struct
值是不可變的,這並不意味着它們不能分配給現有的數組元素。 例如
RenderVertex[] vertices = new RenderVertex[mesh.Vertices.Length];
for (int i = 0; i < mesh.Vertices.Length; i++) {
vertices[i] = new RenderVertex(mesh.Vertices[i]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.