Конвертировать IList в массив в C # - PullRequest
8 голосов
/ 01 марта 2012

Я хочу преобразовать IList в массив: Пожалуйста, смотрите мой код:

IList list = new ArrayList();
list.Add(1);
Array array = new Array[list.Count];
list.CopyTo(array, 0);

Почему я получаю System.InvalidCastException: хотя бы один элемент в исходном массиве не может быть приведен к целевому типу массива ? Как это можно решить, если я не могу использовать ArrayList в качестве типа для list variable?

Обновление 1: Я использую .NET 1.1. Поэтому я не могу использовать Generics, Linq и так далее. Я просто хочу получить результат для наиболее распространенного случая - целое число было приведено в качестве примера, мне нужно, чтобы этот код работал для всех типов, поэтому я использую Array здесь (возможно, я ошибаюсь по поводу использования Array, но мне нужно, один раз опять общий случай).

Ответы [ 3 ]

30 голосов
/ 01 марта 2012

Вы создаете массив из Array значений . 1 является int, а не Array. Вы должны иметь:

IList list = new ArrayList();
list.Add(1);
Array array = new int[list.Count];
list.CopyTo(array, 0);

или, в идеале, не использовать неуниверсальные типы для начала ... используйте List вместо ArrayList, IList<T> вместо IList и т. Д.

РЕДАКТИРОВАТЬ: Обратите внимание, что третья строка может быть легко:

Array array = new object[list.Count];

вместо.

19 голосов
/ 01 марта 2012

Вы можете использовать Cast и ToArray:

Array array = list.Cast<int>().ToArray();
4 голосов
/ 01 марта 2012

Я удивлен, что

 Array array = new Array[list.Count];

даже компилируется, но не делает то, что вы хотите. Используйте

 object[] array = new object[list.Count];

И, стандартное замечание: если вы можете использовать C # 3 или более позднюю версию, по возможности избегайте ArrayList. Вы, вероятно, будете счастливее с List<int>

...