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中无法比较数组中的两个元素。
我可以知道它为什么不起作用?有没有办法对列表或字节数组进行排序?
答案 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());
}