var r = from s in tempResult
select Encoding.GetEncoding("iso-8859-1").GetBytes(s);
Run Code Online (Sandbox Code Playgroud)
我理解,这会返回IEnumerable<byte[]>,但我正在寻找LINQ方式将整个转换IEnumerable<byte[]>为byte[].
cdh*_*wie 16
到目前为止提供的答案都不会起作用,因为它们会转换IEnumerable<byte[]>为byte[][].如果您的目标是获取可枚举中的所有数组并生成一个大数组,请尝试以下操作:
byte[] result = r.SelectMany(i => i).ToArray();
Run Code Online (Sandbox Code Playgroud)
请参阅此ideone示例.
请注意,这不是最有效的方法.将原始查询结果转换为列表会更快,然后计算数组长度的总和.完成后,您可以立即分配最终数组,然后再对结果列表进行一次传递,并将每个结果数组的内容复制到较大的数组中.
上面的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;
}
Run Code Online (Sandbox Code Playgroud)
请注意,无论您传入的枚举是什么,都会被枚举两次,因此如果查询很昂贵,最好传入列表或数组而不是查询.