将List <byte []>转换为Byte [] </byte []>

时间:2013-04-24 06:52:43

标签: c# type-conversion gtk#

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

  

“输入System.Collections.Generic.List<byte[]>' does not contain a definition for SelectMany”,找不到扩展方法SelectMany' of type System.Collections.Generic.List'(是吗?   缺少using指令或汇编引用?)(CS1061)“。

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

3 个答案:

答案 0 :(得分:1)

确保:

  1. 您正在使用.NET framework 3.5或更高版本。
  2. 您有对System.Core的引用。
  3. 您在代码文件的顶部“使用System.Linq”。

答案 1 :(得分:0)

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

一个简单的(不确定是否有更简单的方法)方法是计算数组需要的总大小并将其初始化为该大小。然后遍历列表并将每个byte []中的数据放入新的byte []中,跟踪你所在阵列的距离。

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;
    }

答案 2 :(得分: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进行了测试