var r = from s in tempResult
select Encoding.GetEncoding("iso-8859-1").GetBytes(s);我明白,这会返回IEnumerable<byte[]>,但是我在寻找LINQ的方法来将整个IEnumerable<byte[]>转换成byte[]。
发布于 2011-08-13 02:05:39
到目前为止,提供的答案都不起作用,因为它们会将IEnumerable<byte[]>转换为byte[][]。如果您的目标是获取enumerable中的所有数组并生成一个大数组,请尝试以下方法:
byte[] result = r.SelectMany(i => i).ToArray();参见this ideone example。
请注意,这不是最有效的方法。将原始查询结果转换为列表,然后计算数组长度之和会更快。完成后,您可以立即分配最终的数组,然后在结果列表上再进行一次遍历,并将每个结果数组的内容复制到更大的数组中。
上面的LINQ查询无疑使这项任务变得容易,但它不会很快。如果此代码成为应用程序中的瓶颈,请考虑以这种方式重写它。
我不妨提供一个更有效的实现的例子:
public static T[] JoinArrays<T>(this IEnumerable<T[]> self)
{
if (self == null)
throw new ArgumentNullException("self");
int count = 0;
foreach (var arr in self)
if (arr != null)
count += arr.Length;
var joined = new T[count];
int index = 0;
foreach (var arr in self)
if (arr != null)
{
Array.Copy(arr, 0, joined, index, arr.Length);
index += arr.Length;
}
return joined;
}请注意,您传入的任何可枚举值都将被枚举两次,因此,如果查询开销很大,那么传入列表或数组而不是查询将是一个好主意。
发布于 2011-08-13 02:02:52
var r = (from s in tempResult
select Encoding.GetEncoding("iso-8859-1").GetBytes(s)
).ToArray();发布于 2011-08-13 02:03:19
那么ToArray扩展方法呢?
byte[] array = r.SelectMany(a => a).ToArray();https://stackoverflow.com/questions/7044358
复制相似问题