簡體   English   中英

為任意數量的元素初始化C#中的不變結構數組

[英]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數組,但我只能看到以下替代方案:

  1. 創建一個列表,然后迭代每個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()) 
  2. 刪除只讀數組並使用可變數組,盡管分配這些結構后將不再需要更改它們。 這違反了我真正同意的不變數組約定。

還有其他方法可以將它們保留為不可變結構,而不必分配其他存儲來創建目標數組嗎?

即使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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM