Преобразуйте 'ArrayList' в 'List <string>' (или 'List <T>'), используя LINQ
Я хочу преобразовать ArrayList
в List<string>
с помощью LINQ. Я пробовал ToList()
, но этот подход не работает:
ArrayList resultsObjects = new ArrayList();
List<string> results = resultsObjects.ToList<string>();
Ответы
Ответ 1
В вашем коде на самом деле отображается List<ArrayList>
, а не один ArrayList
. Если у вас действительно есть только один ArrayList
, вы, вероятно, захотите:
ArrayList resultObjects = ...;
List<string> results = resultObjects.Cast<string>()
.ToList();
Вызов Cast
требуется, потому что ArrayList
слабо типизирован - он реализует только IEnumerable
, а не IEnumerable<T>
. Почти все операторы LINQ в LINQ to Objects основаны на IEnumerable<T>
.
Предполагая, что значения внутри ArrayList
действительно являются строками. Если это не так, вам нужно предоставить нам дополнительную информацию о том, как вы хотите, чтобы каждый элемент был преобразован в строку.
Ответ 2
Предполагаю, что ваша первая строка должна быть ArrayList resultsObjects = new ArrayList();
.
Если объекты внутри ArrayList
имеют определенный тип, вы можете использовать метод расширения Cast<Type>
:
List<string> results = resultsObjects.Cast<string>().ToList();
Если в ArrayList
есть какие-либо объекты, которые вы хотите преобразовать в строки, вы можете использовать это:
List<string> results = resultsObjects.Cast<object>().Select(x => x.ToString())
.ToList();
Ответ 3
Вы можете преобразовать элементы ArrayList
в массив object[]
, используя метод ArrayList.ToArray()
.
List<ArrayList> resultsObjects = new List<ArrayList>();
resultsObjects.Add(new ArrayList() { 10, "BB", 20 });
resultsObjects.Add(new ArrayList() { "PP", "QQ" });
var list = (from arList in resultsObjects
from sr in arList.ToArray()
where sr is string
select sr.ToString()).ToList();
Ответ 4
Вы также можете использовать метод LINQ OfType < > , в зависимости от того, хотите ли вы создать исключение, если один из элементов в списке arrayList не поддается заданному типу. Если ваш массивList имеет в нем объекты, которые не являются строками, OfType() будет игнорировать их.
var oldSchoolArrayList = new ArrayList() { "Me", "You", 1.37m };
var strings = oldSchoolArrayList.OfType<string>().ToList();
foreach (var s in strings)
Console.WriteLine(s);
Вывод:
Me
You