在我的项目中,我有一个类似于以下类的类:
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.)的组合。只有数组组合的方式,每个“组件数组”的元素在整个“主数组”中均匀分布,所有这些元素都混乱起来,而不是每个数组依次连接起来。
我想知道是否有一种方法可以公开这些数组(例如,子类数组) (vertexData1...),这样该类的使用者就可以访问它们,就好像它们是具有连续元素的常规数组一样(包括复制到和复制),但是在幕后,对象实际上是在整个vertexBuffer中分发这些元素,从而消除了对()方法和重复数据的需求。
在C#?中有这个可能吗?
发布于 2012-10-28 15:03:42
是的,你可以使用索引器。类似于:
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;
}我不知道你想如何安排索引器中的数据。您可能希望交换/和%的使用,这取决于您是希望彼此之间的数组还是交错的。
发布于 2012-10-28 15:08:14
您可以实现索引器这个in索引,并在其中提供自己的功能:
public class Vertices
{
public float this[int index]
{
get
{
// do your stuff here
}
set
{
// do your stuff here
}
}
}https://stackoverflow.com/questions/13109882
复制相似问题