19

ArrayListList<string>使用するLINQに変換したいと思います。私は試しToList()ましたが、そのアプローチは機能していません:

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

4 に答える 4

34

あなたのコードは実際にList<ArrayList>は単一ではなくを示していArrayListます。本当に1つしかない場合はArrayList、おそらく次のようにします。

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

は弱く型付けされているため、このCast呼び出しが必要です。これは、を実装するだけで、を実装しません。LINQ to ObjectsのほとんどすべてのLINQ演算子は、に基づいています。ArrayListIEnumerableIEnumerable<T>IEnumerable<T>

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

于 2012-08-15T06:25:52.937 に答える
3

私はあなたの最初の行がであるように意図されていたと思います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();
于 2012-08-15T06:25:59.613 に答える
1

arrayList内の項目の1つが目的の型にキャストできない場合に例外を発生させるかどうかに応じて、LINQのOfType<>メソッドを使用することもできます。arrayListに文字列ではないオブジェクトが含まれている場合、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
于 2017-01-02T21:28:24.803 に答える
0

メソッドを使用して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();
于 2012-08-15T06:38:37.380 に答える