ArrayList
не имеет конструктора или метода Add (Range), который принимает IEnumerable
. Так что остается два варианта:
Используйте промежуточную коллекцию, которая реализует ICollection
: поскольку и Array
, и List<T>
орудие ICollection
можно использовать с помощью методов расширения ToArray()
или ToList()
из LINQ.
Создайте экземпляр ArrayList
, а затем добавьте каждый элемент результата:
var query = /* LINQ Expression */
var res = new ArrayList();
foreach (var item in query) {
res.Add(item);
}
Первый метод прост в использовании, но он подразумевает создание промежуточной структуры данных (какой из двух вариантов имеет более высокие издержки - интересный вопрос и частично зависит от запроса, поэтому нет общего ответа). Последний - больше кода и включает в себя увеличение ArrayList
постепенно (так что больше памяти для GC, как было бы для промежуточного Array
или List<T>
).
Если вам просто нужно это в одном месте, вы можете просто сделать код встроенным, если вам нужно сделать это в нескольких местах, создайте свой собственный метод расширения для IEnumerable<T>
:
public static class MyExtensions {
public static ArrayList ToArrayList<T>(this IEnumerable<T> input) {
var col = input as ICollection;
if (col != null) {
return new ArrayList(col);
}
var res = new ArrayList();
foreach (var item in input) {
res.Add(item);
}
return res;
}
}