在我的项目中,我有一个类似于以下的类:
public class Vertices
{
float[] vertexData1;
int vertexData1Offset;
float[] vertexData2;
int vertexData2Offset;
float[] vertexData3;
int vertexData3Offset;
float[] vertexBuffer;
int vertexCount;
int vertexStride;
public void Update()
{
for(int i = 0; i < vertexCount; i++)
{
vertexBuffer[(i * vertexStride) + vertexData1Offset] = vertexData1[i];
vertexBuffer[(i * vertexStride) + vertexData2Offset] = vertexData2[i];
vertexBuffer[(i * vertexStride) + vertexData3Offset] = vertexData3[i];
}
}
}
也就是说,我有一个数组( vertexBuffer ),这个数组是另一组数组( vertexData1 ... )的组合。只有组合数组的方式,每个'组件数组'的元素在整个'主数组'中均匀分布,所有这些都是混乱的,而不是每个数组顺序连接。
我想知道是否有办法以这种类的消费者的方式公开这些数组(例如,某种方式来子类化Array)( vertexData1 ... )可以访问它们就好像它们是具有连续元素的常规数组(包括复制到和来自),但在幕后,对象真的会在 vertexBuffer 中分发这些元素,从而消除了需求对于Update()方法和重复数据。
这在C#中是否可行?
答案 0 :(得分:3)
是的,您可以使用索引器。类似的东西:
public class Vertices
{
float[] vertexData1;
int vertexData1Offset;
float[] vertexData2;
int vertexData2Offset;
float[] vertexData3;
int vertexData3Offset;
private float[] GetArrayForIndex(int index) {
switch (index / vertexStride) {
case 0: return verdexData1;
case 1: return vertedData2;
case 2: return vertexData3;
default: throw new IndexOutOfRangeException();
}
}
public float vertexBuffer[int index] {
get {
return GetArrayForIndex(index)[index % vertexStride];
}
set {
GetArrayForIndex(index)[index % vertexStride] = value;
}
}
int vertexStride;
}
我不确定您希望如何在索引器中排列数据。您可能希望交换/
和%
的使用,具体取决于您是希望数组相继或交错。
答案 1 :(得分:0)
你可以实现这个[int index]的索引器并在其中提供你自己的功能:
public class Vertices
{
public float this[int index]
{
get
{
// do your stuff here
}
set
{
// do your stuff here
}
}
}