Могу ли я использовать приведение для доступа к многомерному массиву одним аргументом? - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть 3D-массив и вспомогательный класс Point.Могу ли я каким-то образом получить доступ к определенной ячейке в массиве, используя только Point, а не Point.x, Point.y, Point.z?

class Point {
    int x, y, z;
    public Point(int _x, int _y, int _z) {
        x = _x; y = _y; z = _z;
    }
}

bool[,,] arr = new bool[10, 10, 10];
Point pt = new Point(5, 5, 5);

// I have to do this:
bool[pt.x, pt.y, pt.z] = true;

// I'd like to do this:
bool[pt] = true;

Можно ли как-нибудь это сделать?Я знаю, что могу использовать обертку вокруг массивов.Есть ли что-то, что я мог бы сделать вместо этого с классом Point?

Спасибо!

1 Ответ

0 голосов
/ 17 февраля 2019

Как указано в комментариях, вы не можете сделать это так, как вы просили.Тем не менее, вы могли бы написать что-то, что выглядит так же хорошо, добавив оператор индекса к Point:

class Point
{
    int x, y, z;
    public Point(int _x, int _y, int _z)
    {
        x = _x; y = _y; z = _z;
    }

    public bool this[bool[,,] arr]
    {
        get { return arr[this.x, this.y, this.z]; }
        set { arr[this.x, this.y, this.z] = value; }
    }
}

, который затем позволяет назначить True следующим образом:

bool[,,] arr = new bool[10, 10, 10];
Point pt = new Point(5, 5, 5);

pt[arr] = true;

Единственное отличие состоит в том, что вместо arr[pt] вы должны сделать pt[arr].

...