0

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

“类型System.Collections.Generic.List<byte[]>' does not contain a definition forSelectMany' 并且找不到扩展方法SelectMany' of typeSystem.Collections.Generic.List'(您是否缺少 using 指令或程序集引用?)(CS1061)”。

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

4

3 回答 3

1

确保:

  1. 您正在使用 .NET 框架 3.5 或更高版本。
  2. 您有对 System.Core 的引用。
  3. 您的代码文件顶部有“使用 System.Linq”。
于 2013-04-24T07:02:11.647 回答
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;
    }
于 2013-04-24T06:58:45.517 回答
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 进行测试

于 2013-04-24T07:52:36.500 回答