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