Я хочу преобразовать ArrayList в List<string> с помощью LINQ. Я пробовал ToList(), но этот подход не работает:
ArrayList resultsObjects = new ArrayList();
List<string> results = resultsObjects.ToList<string>();
Я хочу преобразовать ArrayList в List<string> с помощью LINQ. Я пробовал ToList(), но этот подход не работает:
ArrayList resultsObjects = new ArrayList();
List<string> results = resultsObjects.ToList<string>();
В вашем коде на самом деле отображается 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 действительно являются строками. Если это не так, вам нужно предоставить нам дополнительную информацию о том, как вы хотите, чтобы каждый элемент был преобразован в строку.
Предполагаю, что ваша первая строка должна быть 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();
Вы можете преобразовать элементы 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();
Вы также можете использовать метод 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