0

这是一个简单的问题,但我真的不知道如何有效地做到这一点。有什么方法可以有效地将值列表转换为数组,例如直接转换List<int>int[]OR而不使用循环,最好使用 Linq?List<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>implementsIEnumerable<T>并且您有一个返回IEnumerable<IEnumerable<T>>类似或协变类型的查询, IList<GenericCollection<T>>您可以这样做,

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

症结在于它o本身IEnumerable<T>

于 2012-10-09T11:24:41.227 回答
2

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

于 2012-10-09T11:24:44.167 回答
1

就这样做,在 List 上使用 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()按照其他答案查看方法:

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

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 回答