2012-08-15 119 views
15

ArrayListをLINQを使用してList<string>に変換します。私はToList()を試みたが、そのアプローチは機能していません。LINQを使用して 'ArrayList'を 'List <string>'(または 'List <T>')に変換します。

ArrayList resultsObjects = new ArrayList(); 
List<string> results = resultsObjects.ToList<string>(); 
+0

可能な複製(http://stackoverflow.com/質問/ 786268/in-net-how-do-you-convert-an-arraylist-to-a-strong-typed-ジェネリックリスト - withou) –

答えて

23

あなたのコードは実際List<ArrayList>ではなく、単一ArrayListを示しています。あなたが本当にちょうど1 ArrayListを持っている場合、あなたはおそらくしたいと思います:ArrayListが弱い型指定されているので

ArrayList resultObjects = ...; 
List<string> results = resultObjects.Cast<string>() 
            .ToList(); 

Castコールが必要とされる - それは唯一のIEnumerable、ないIEnumerable<T>実装します。 LINQ to ObjectsのほとんどのLINQ演算子はIEnumerable<T>に基づいています。

これは、ArrayListの値が実際に文字列であると仮定しています。そうでない場合は、各アイテムをどのように文字列に変換するかについて、より多くの情報を提供する必要があります。

2

あなたの最初の行はArrayList resultsObjects = new ArrayList();であると仮定しました。

ArrayList内のオブジェクトが特定の型である場合、あなたはCast<Type>拡張メソッドを使用することができます:あなたはしたいArrayList内の任意のオブジェクトがある場合

List<string> results = resultsObjects.Cast<string>().ToList(); 

をすることができます、文字列にを変換しますこれを使用する:

List<string> results = resultsObjects.Cast<object>().Select(x => x.ToString()) 
                .ToList(); 
0

あなたはArrayList.ToArray()メトを使用してobject[]配列にArrayList要素を変換することができますd。また、あなたはあなたのArrayList内のアイテムのいずれかが必要なタイプにキャスト可能でない場合は例外を発生するかどうかに応じて、LINQのOfType <>メソッドを使用することができます

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(); 
0

。 arrayListに文字列ではないオブジェクトがある場合、OfType()はそれらを無視します。

var oldSchoolArrayList = new ArrayList() { "Me", "You", 1.37m }; 
var strings = oldSchoolArrayList.OfType<string>().ToList(); 
foreach (var s in strings) 
    Console.WriteLine(s); 

出力:[?.NETで、どのようにするforeachを使用せずに、強く型付けされたジェネリックリストへのArrayListを変換しない]

Me 
You 
関連する問題