2013-04-24 38 views
0

我使用Gtk#,我需要将List<Byte[]>转换为Byte[]。我发现这个操作here的样本,但它是.NET框架的样品,当我试图通过Gtk#的做到这一点,我有一些编译错误:转换列表<Byte[]>转换为字节[]

“类型System.Collections.Generic.List<byte[]>' does not contain a definition for的SelectMany”,没有扩展方法System.Collections中SelectMany' of type .Generic.List'可以找到(你是 缺少使用指令或程序集引用?)(CS1061)“。

我该如何解决这个错误或其他Gtk#的转换方式我可以使用?

+8

在您的源代码文件中添加'using System.Linq;'。 – Dennis 2013-04-24 06:55:12

+1

@丹尼斯,这应该是一个答案 – Habib 2013-04-24 06:58:21

回答

1

确保:

  1. 您使用.NET Framework 3.5或更高。
  2. 您有一个对System.Core的引用。
  3. 您在代码文件的顶部有“使用System.Linq”。
0

IEnumerable的扩展是后来的.net框架版本的一部分,Gtk#可能没有它们,或者它们可能以其他名称存在。

一个简单的(不确定是否有一个更简单的方法来做到这一点)方法将是计算数组需要的总大小并将其初始化为该大小。然后循环遍历列表,并通过跟踪您所在的阵列有多远来将每个字节[]中的数据放入新字节[]中。

private static Byte[] ConvertList(List<Byte[]> list) 
    { 
     int totalLength = 0; 

     foreach (byte[] b in list) 
     { 
      totalLength += b.Length; 
     } 

     byte[] result = new byte[totalLength]; 

     int currentPosition = 0; 

     foreach (byte[] byteArray in list) 
     { 
      foreach (byte b in byteArray) 
      { 
       result[currentPosition] = b; 
       currentPosition++; 
      } 
     } 

     return result; 
    } 
0
private static Byte[] ConvertList(List<Byte[]> list) 
    { 
     List<Byte> tmpList = new List<byte>(); 
     foreach (Byte[] byteArray in list) 
      foreach (Byte singleByte in byteArray) 
       tmpList.Add(singleByte); 
     return tmpList.ToArray(); 
    } 

几乎是其他代码示例的较短版本。 测试.Net Framework 2.0