5

我正在重构我们当前使用的库,我面临以下问题。

我们曾经有以下东西:

class Blah
{
    float[][] data;
    public float[] GetDataReference(int index)
    {
        return data[index];
    }
}

由于各种原因,我用一维数组版本替换了这个锯齿状数组版本,连接内部数组。我的问题是:我怎样才能仍然返回对子数组的引用data

class Blah
{
    float[] data;
    int rows;

    public float[] GetDataReference(int index)
    {
        // Return a reference data from offset i to offset j;
    }
}

我在想不安全和指针的东西可能有用,它可行吗?

4

2 回答 2

10

不,你不能这样做——但你应该考虑使用ArraySegment

请注意,数组对象由有关其长度等的元数据组成,然后是数据本身。如果您明白我的意思,您不能创建现有数组的切片并且仍然在数据旁边保留元数据 - 必须有一个额外的间接级别(这是ArraySegment提供的)。

(我有点惊讶 ArraySegment 没有做更多的包装,例如通过实现IList<T>,但我们走了。如果你愿意,创建这样的结构很容易。)

于 2010-04-08T09:01:39.243 回答
1

检查关于 SO 的以下问题,但不要使用已接受的答案(毕竟您不想复制),而是遵循使用枚举器作为原始数组的切片/子部分的其他选项。

C#中的数组切片

于 2010-04-08T09:03:59.977 回答