为什么arrayList.sort()doestnt和我一起工作?

时间:2017-12-27 23:56:25

标签: c#

ArrayList x = new ArrayList();
var sevenItems = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
var sevenItems2 = new byte[] { 0x10, 0x00, 0x20, 0x20, 0x20, 0x20,0x20 };
x.Add(sevenItems);
x.Add(sevenItems2);
x.sort(); //doesnt work

输出结果为:

  

未处理的类型' System.InvalidOperationException'   发生在mscorlib.dll中无法比较数组中的两个元素。

我可以知道它为什么不起作用?有没有办法对列表或字节数组进行排序?

1 个答案:

答案 0 :(得分:0)

您正在ArrayList中添加两个字节数组,并尝试对它们进行排序。由于排序是在比较的基础上执行的...在运行时,您的应用程序会抱怨缺少在两个数组之间定义优先级的标准。

public class BytesComparer : IComparer
{
    Int32 IComparer.Compare(Object x, Object y)
    {
        Byte[] left = (Byte[])x;
        Int32 val1 = BitConverter.ToInt32(left.Take(4).ToArray(), 0);

        Byte[] right = (Byte[])y;
        Int32 val2 = BitConverter.ToInt32(right.Take(4).ToArray(), 0);

        return val1.CompareTo(val2);
    }
}

public static void Main(string[] args)
{
    ArrayList x = new ArrayList();
    Byte[] sevenItems1 = new Byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
    Byte[] sevenItems2 = new Byte[] { 0x10, 0x00, 0x20, 0x20, 0x20, 0x20,0x20 };

    x.Add(sevenItems1);
    x.Add(sevenItems2); 
    x.Sort(new BytesComparer());
}