c# – 将IEnumerable转换为byte []
发布时间:2020-12-15 19:44:58 所属栏目:百科 来源:网络整理
导读:var r = from s in tempResult select Encoding.GetEncoding("iso-8859-1").GetBytes(s); 我明白了,这会返回IEnumerable byte [],但我正在寻找LINQ方式来转换整个IEnumerable byte []到byte []. 解决方法 到目前为止提供的答案都不起作用,因为它们将转换IEnu
var r = from s in tempResult select Encoding.GetEncoding("iso-8859-1").GetBytes(s); 我明白了,这会返回IEnumerable< byte []>,但我正在寻找LINQ方式来转换整个IEnumerable< byte []>到byte []. 解决方法
到目前为止提供的答案都不起作用,因为它们将转换IEnumerable< byte []>到byte [] [].如果您的目标是获取可枚举中的所有数组并生成一个大数组,请尝试以下操作:
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,joined,index,arr.Length); index += arr.Length; } return joined; } 请注意,无论您传入的枚举是什么,都会被枚举两次,因此如果查询很昂贵,最好传入列表或数组而不是查询. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |