c# 中的索引泛型(multi-type,单值)多维数组

Indexed generic (multi-type, single value) multidimensional array in c#

任务:
从二进制文件中读取数组(跟踪数据),其中数组的数量、长度和数据类型在文件开头定义 (header)。

条件:

意向:
我想要一个多维 Arry(或带数组的列表),我可以在其中获取和设置每个值。

状态:
根据我的研究,我已经可以构建以下代码(不知道是否有更好的方法!?可能使用数组?)。 (最佳研究结果:Best way to design a multi-type object

private abstract class TraceData
{

}

private class TraceData<T> : TraceData
{
    public T[] Data;

    public TraceData(UInt32 length)
    {
        Data = new T[length];
    }

    public T this[int index]
    {
        get { return Data[index]; }
        set { Data[index] = value; }
    }
}

private class Traces
{
    public List<TraceData> Data;

    public Traces(TraceHeader Header, Byte[] file, int offset)
    {
        Data = new List<TraceData>();
        for (int i = 0; i < Header.DataAmount; i++)
        {
            TraceData tmp;
            switch (Header.DataTyp[i])
            {
                case 2:
                    tmp = new TraceData<SByte>(Header.DataLength);
                    break;
                case 3:
                    tmp = new TraceData<Int16>(Header.DataLength);
                    break;
                //...
                default:
                    tmp = new TraceData<Int32>(Header.DataLength);
                    break;
            }
            Data.Add(tmp);
        }
        for (int i = 0; i < Header.DataLength; i++)
        {
            for (int j = 0; j < Header.DataAmount; j++)
            {
                switch (Header.DataTyp[j])
                {
                    case 2:
                        Data[j][i] = (SByte)file[offset + i*Header.DataAmount*4 + j*4 + 3];
                        break;
                    case 3:
                        Data[j][i] = BitConverter.ToUInt16(file, offset + i*Header.DataAmount*4 + j*4 + 2);
                        break;
                    //...
                    default:
                        Data[j][i] = BitConverter.ToUInt32(file, offset + i*Header.DataAmount*4 + j*4 + 0);
                        break;
                }
            }
        }
    }
}

问题:
使用该代码,我无法索引 TraceData 类型的元素。

希望你能帮上忙。 谢谢

我猜他的意思是访问通用类型 TraceData 的数据数组,但他只知道抽象基础类型的对象-class TraceData。像这些调用不起作用:

Data[j][i] = (SByte)file[offset + i*Header.DataAmount*4 + j*4 + 3];

因为Data[j]是TraceData类型。在任何情况下,您都需要知道该特定实例中所用类型的通用参数。所以你可以投(SByte 的例子):

TraceData<SByte> SByteTraceData = (TraceData<SByte>)Data[j];
SByteTraceData[i] = (SByte)file[offset + i * Header.DataAmount * 4 + j * 4 + 3];