0

それは簡単な質問ですが、効率的に行う方法がよくわかりません。できればLinqを使用して、ループを使用せずに値のリストを配列に効率的に変換する方法はありますか?たとえばList<int>int[]ORList<CustomObj>に直接変換する方法はありますか?CustomObj[]

さらに、ループせずGenericCollection<T>にLinqクエリをGenericCollection<T>直接変換するにはどうすればよいですか?

GenericCollection<T> result = SomeGenericCollection.Select(o => o).ToList<GenericCollection<T>>();
4

8 に答える 8

2

Linqs.ToArray()メソッドを使用してみる

于 2012-10-09T11:24:36.773 に答える
2

ええと、ToArray()拡張メソッドを使用するのはどうですか。

var intList = new List<int> { 1, 2, 3 };
int[] intArray = intList.ToArray();

拡張された質問への回答として、 をGenericCollection<T>実装し、次のようなまたは共変型 IEnumerable<T>を返すクエリがある場合は、次のようにすることができます。IEnumerable<IEnumerable<T>>IList<GenericCollection<T>>

IEnumerable<T> flat = SomeGenericCollectionCollection<T>.SelectMany(o => o)

核心oIEnumerable<T>それ自体です。

于 2012-10-09T11:24:41.227 に答える
2

ToArray()拡張メソッドを使用するだけです。

于 2012-10-09T11:24:44.167 に答える
1

このようにして、リストで ToArray を使用します。

List<string> l = new List<string> { "one", "two", "three", "four", "five" };

string[] s = l.ToArray();
于 2012-10-09T11:25:35.800 に答える
1
List<int> l = ...
int [] s = l.ToArray()
于 2012-10-09T11:25:52.150 に答える
1

ToArray() linq メソッドでそれを行うことができます。

List<int> lst = new List<int>();
int arr[] = lst.ToArray();
于 2012-10-09T11:26:01.577 に答える
0

GenericCollection<T>拡張メソッドが機能するIEnumerable<T>ように実装します。ToArray()

そうでない場合は、次のことを試してください。

using System.Linq;

GenericCollection<T> gc = ...
T[] arr = ((IEnumerable<T>)gc).ToArray();

また

T[] arr = new List<T>(gc).ToArray();
于 2012-10-09T11:35:54.860 に答える
0

質問の最初の部分についてはToArray()、他の回答に従って方法を見てください。

2 番目の部分では、独自の拡張メソッドを記述できます。

public static class MyExtensions
{
   public static GenericCollection<T> ToGenericCollection<T>(
     this IEnumerable<T> input
   )
   {
      // write the conversion here - typically you will need a for loop
   }
}

これを取得したらGenericCollection<T>、次のように任意のコレクションを自分のコレクションに変換できます。

var result = SomeGenericCollection.Select(o => o).ToGenericCollection();

ループを書かなければならないことを避けることはできませんが、このようにすれば一度だけ書くだけで済みます。

于 2012-10-09T11:42:53.790 に答える