Свойство 2D-массива - PullRequest
       6

Свойство 2D-массива

3 голосов
/ 24 мая 2011

Можно ли написать свойство для двумерного массива, которое возвращает определенный элемент массива? Я почти уверен, что не ищу индексаторы, потому что их массив принадлежит статическому классу.

Ответы [ 3 ]

6 голосов
/ 24 мая 2011

Звучит так, как будто вы хотите свойство с параметрами, что в принципе и является индексатором. Однако вы не можете писать статические индексаторы на C #.

Конечно, вы могли бы просто написать свойство, которое возвращает массив - но я предполагаю, что вы не хотите делать это по причинам инкапсуляции.

Другая альтернатива - написать GetFoo(int x, int y) и SetFoo(int x, int y, int value) методы.

Еще одна альтернатива - написать тип-обертку вокруг массива и вернуть , что , в качестве свойства. Тип обертки может иметь индексатор - может быть, только для чтения, например:

public class Wrapper<T>
{
    private readonly T[,] array;

    public Wrapper(T[,] array)
    {
        this.array = array;
    }

    public T this[int x, int y]
    {
        return array[x, y];
    }

    public int Rows { get { return array.GetUpperBound(0); } }
    public int Columns { get { return array.GetUpperBound(1); } }
}

Тогда:

public static class Foo
{
    private static readonly int[,] data = ...;

    // Could also cache the Wrapper and return the same one each time.
    public static Wrapper<int> Data
    {
        get { return new Wrapper<int>(data); }
    }
}
1 голос
/ 24 мая 2011

Вы имеете в виду что-то подобное?

array[x][y]

Где x - строка, а y - столбец.

0 голосов
/ 24 мая 2011

Может быть как то так?:

public string this[int x, int y] 
{
   get { return TextArray[x, y]; }
   set { TextArray[x, y] = value; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...