这是一个简单的问题,但我真的不知道如何有效地做到这一点。有没有办法有效地将值列表转换为数组,例如List<int>
到int[]
OR List<CustomObj>
到CustomObj[]
,而不使用循环优先使用Linq?
另外,我有一个GenericCollection<T>
,如何直接将Linq查询转换为GenericCollection<T>
而不会循环,例如。
GenericCollection<T> result = SomeGenericCollection.Select(o => o).ToList<GenericCollection<T>>();
答案 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()
方法:
List<T>.ToArray()
:http://msdn.microsoft.com/en-us/library/x303t819.aspx Enumerable.ToArray<T>()
扩展方法:http://msdn.microsoft.com/en-us/library/x303t819.aspx#Y0 对于第二部分,您可以编写自己的扩展方法:
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();
你真的无法避免编写循环,但这样你只需要编写一次。