C# 转换列表<;字节[]>;到字节[]

C# 转换列表<;字节[]>;到字节[],c#,type-conversion,gtk#,C#,Type Conversion,Gtk#,我使用Gtk,需要将List转换为Byte[]。我找到了此操作的示例,但它是.NET Framework的示例,当我尝试使用Gtk#执行此操作时,出现了一些编译错误: “TypeSystem.Collections.Generic.List”不包含 的SelectMany'和无扩展方法的定义 键入System.Collections.Generic.List'可以找到(您是吗 缺少using指令或程序集引用?(CS1061)” 如何解决此错误,或者我可以使用其他Gtk的转换方法?IEnumera

我使用Gtk,需要将
List
转换为
Byte[]
。我找到了此操作的示例,但它是.NET Framework的示例,当我尝试使用Gtk#执行此操作时,出现了一些编译错误:

“Type
System.Collections.Generic.List”不包含
的
SelectMany'和无扩展方法的定义 键入System.Collections.Generic.List'可以找到(您是吗 缺少using指令或程序集引用?(CS1061)”


如何解决此错误,或者我可以使用其他Gtk的转换方法?

IEnumerable的扩展是更高版本的.net framework的一部分,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;
    }
私有静态字节[]转换列表(列表)
{
int-totalength=0;
foreach(列表中的字节[]b)
{
总长度+=b.长度;
}
字节[]结果=新字节[总长度];
int currentPosition=0;
foreach(列表中的字节[]byteArray)
{
foreach(字节数组中的字节b)
{
结果[当前位置]=b;
currentPosition++;
}
}
返回结果;
}
确保:

  • 您正在使用.NET framework 3.5或更高版本
  • 您有对System.Core的引用
  • 在代码文件的顶部有“usingsystem.Linq”
  • 私有静态字节[]转换列表(列表)
    {
    List tmpList=新列表();
    foreach(列表中的字节[]byteArray)
    foreach(字节数组中的单字节)
    tmpList.Add(单字节);
    返回tmpList.ToArray();
    }
    
    几乎是另一个代码示例的较短版本。
    使用System.Linq对.Net Framework 2.0进行测试

    Add
    在源代码文件中。@Dennis,这应该是答案
    
    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();
        }