Как объявить двумерный массив, индексируемый парой число-строка?

Рейтинг: 0Ответов: 1Опубликовано: 19.03.2015

Например, чтобы можно было выполнить вызов вида array[14, "word"].

Можно создать массив с элементами List<KeyValuePair<string, string>>, но это уже будет не так удобно.

Возможно, это можно найти в интернете, но я не могу составить правильный запрос.

Ответы

▲ 3Принят

Подобные массивы в C# невозможны. В них нет необходимости, поскольку язык имеет статическую типизацию, при этом существует большое количество обобщенных контейнеров практически на любой вкус. Массивы в C# индексируются целочисленными значениями. Для ключей других типов существуют такие типы данных, как Dictionary<T, U>, Lookup<T, U>, KeyValuePair<T, U>, отчасти Tuple<T, U>. Сходного поведения можно достигнуть различными способами, в частности, так:

ar arr = new Dictionary<string, string>[5];
...
arr[0]["qwerty"] = "foo";

Однако с помощью индексаторов можно реализовать и аналогичный синтаксис (вопрос только, зачем):

class Foo
{
    private List<Dictionary<string, string>> dt = new List<Dictionary<string, string>>();

    public string this[int first, string second]        
    {
        get { return data[first][second]; }
    }
}

....

var foo = new Foo();
string str = foo[0, "qwerty"];