如何将LINQ查询结果分配给自定义集合并将List <t>转换为T [] </t>

时间:2012-10-09 11:23:12

标签: c# arrays linq loops collections

这是一个简单的问题,但我真的不知道如何有效地做到这一点。有没有办法有效地将值列表转换为数组,例如List<int>int[] OR List<CustomObj>CustomObj[],而不使用循环优先使用Linq?

另外,我有一个GenericCollection<T>,如何直接将Linq查询转换为GenericCollection<T>而不会循环,例如。

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

8 个答案:

答案 0 :(得分:2)

尝试使用Linqs .ToArray()方法

答案 1 :(得分: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)

关键是o本身就是IEnumerable<T>

答案 2 :(得分:2)

您只需使用ToArray()扩展方法。

答案 3 :(得分:1)

就这样做,在列表上使用ToArray:

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

string[] s = l.ToArray();

答案 4 :(得分:1)

List<int> l = ...
int [] s = l.ToArray()

答案 5 :(得分:1)

您可以使用ToArray() linq方法执行此操作。

List<int> lst = new List<int>();
int arr[] = lst.ToArray();

答案 6 :(得分: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();

答案 7 :(得分:0)

对于问题的第一部分,请根据其他答案查看ToArray()方法:

对于第二部分,您可以编写自己的扩展方法:

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

你真的无法避免编写循环,但这样你只需要编写一次。