关于C#中数组下标的问题

时间:2011-01-06 14:43:04

标签: c# c arrays multidimensional-array

回到C的旧时代,人们可以使用数组下标以非常有用的方式解决存储问题。例如,可以声明一个数组。

此数组表示具有8位字的EEPROM映像。

BYTE eepromImage[1024] = { ... };

后来将该数组称为多维存储

BYTE mpuImage[2][512] = eepromImage;

我确定我的语法错误,但我希望你明白这个想法。

无论如何,这投影了一个真正的单维存储的二维图像。

二维投影表示加载到具有16位字的MPU存储器中的EEPROM图像。

在C中,可以多维度地引用存储并更改值,并且更改的值将显示在真实(单维)存储中,几乎就像魔法一样。

使用C#可以做同样的事吗?

我们当前的解决方案使用多个数组和事件处理程序来保持事物同步。这种方法有效,但如果有更好的方法,我们希望避免额外的复杂性。

2 个答案:

答案 0 :(得分:9)

您可以将数组包装在一个类中,并编写一维和二维Indexer属性。

没有验证等,对于10x10阵列看起来像这样:

    class ArrayData
    {
        byte[] _data = new byte[100];

        public byte this[int x]          
        { 
            get { return _data[x]; } 
            set { _data[x] = value; }             
        }


        public byte this[int x, int y]
        {
            get { return _data[x*10+ y]; }
            set { _data[x*10 + y] = value; }
        }
    }

答案 1 :(得分:1)

是的,但没有。

如果您愿意,可以从球拍中分配多维数组。您还可以创建一个自定义类,允许您以单维或多维方式访问其基础数据,从而使基础数据保持同步。

但是,您无法直接访问具有多维索引的一维数组。