Как я могу инициализировать IList <IList <string>>? - PullRequest
5 голосов
/ 06 февраля 2012

Пробовал с:

IList<IList<string>> matrix = new List<new List<string>()>();

но я не могу.Как мне это сделать?Мне нужна матрица строк ...

Ответы [ 4 ]

13 голосов
/ 06 февраля 2012

Вам понадобится:

IList<IList<string>> matrix = new List<IList<string>>();

но тогда вы можете произойти , чтобы всегда добавлять List<string> для каждого элемента.

Причина, по которой это не сработает:

// Invalid
IList<IList<string>> matrix = new List<List<string>>();

в таком случае было бы разумно написать:

// string[] implements IList<string>
matrix.Add(new string[10]);

... но это нарушило бы тот факт, что список действительно a List<List<string>> - он должен содержать List<string> значений, а не просто any IList<string>. .. тогда как мое объявление вверху просто создает List<IList<string>>, так что вы можете добавить в него строковый массив без нарушения типа безопасности.

Конечно, вы можете изменить, чтобы вместо этого использовать конкретный тип в вашем объявлении:

IList<List<string>> matrix = new List<List<string>>();

или даже:

List<List<string>> matrix = new List<List<string>>();
3 голосов
/ 06 февраля 2012

попробуйте

    IList<IList<string>> matrix = new List<IList<string>>();
1 голос
/ 06 февраля 2012

если матрица имеет постоянный размер, то матрицы лучше подходят

string[][] matrix = new string[size];
matrix[0] = new string[5];
matrix[1] = new string[8];
matrix[2] = new string[7];

и если оно прямоугольное

string[,] matrix = new string[sizex,sizey];
1 голос
/ 06 февраля 2012

Это будет работать - вы не можете инициализировать параметр универсального типа так, как вы пытались:

IList<IList<string>> matrix = new List<IList<string>>();

Хотя внутренний IList<string> будет null.Для его инициализации вы можете сделать следующее:

matrix.Add(new List<string>());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...