IList неприятности.Исправленный размер? - PullRequest
17 голосов
/ 08 ноября 2011

У меня есть этот код:

IList<string> stelle = stelleString.Split('-');

if (stelle.Contains("3"))
    stelle.Add("8");

if (stelle.Contains("4"))
    stelle.Add("6");

, но кажется, что IList имеет фиксированный размер после .Split (): System.NotSupportedException: Коллекция имела фиксированный размер.

Как я могу решить эту проблему?

Ответы [ 5 ]

21 голосов
/ 08 ноября 2011

Метод Split возвращает массив, и вы не можете изменить размер массива.

Вы можете создать List<string> из массива, используя метод расширения ToList:

IList<string> stelle = stelleString.Split('-').ToList();

или конструктор List<T>:

IList<string> stelle = new List<string>(stelleString.Split('-'));

Кроме того, вы, вероятно, не хотите использовать интерфейс IList<T> в качестве типа переменной, а просто используете фактический тип объекта:

string[] stelle = stelleString.Split('-');

или

List<string> stelle = stelleString.Split('-').ToList();

Это позволит вам использовать именно то, что может делать класс, не ограничиваясь интерфейсом IList<T>, и никакие методы, которые не поддерживаются.

13 голосов
/ 08 ноября 2011

string.Split возвращает строку массив . Это действительно будет иметь фиксированный размер.

Вы можете преобразовать его в List<string>, передав результат в конструктор List<T>:

IList<string> stelle = new List<string>(stelleString.Split('-'));

Или, если доступно, вы можете использовать оператор LINQ ToList():

IList<string> stelle = stelleString.Split('-').ToList();
3 голосов
/ 08 ноября 2011

У него фиксированный размер, причина string.Split возвращает строку []. Вам необходимо передать возвращаемое значение split в экземпляр List для поддержки добавления дополнительных элементов.

2 голосов
/ 08 ноября 2011

Звоните ToList() к результату:

IList<string> stelle = stelleString.Split('-').ToList();
0 голосов
/ 08 ноября 2011

String.split возвращает массив. Но вы можете изменить размер массива. В VB это

ReDim perserve myarray(newlength minus one)
...