2017-12-27 5 views
-5
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 

出力である:arrayList.sort()doestntは私と一緒に使えるのですか?

「System.InvalidOperationException」種類 の未処理の例外が発生したのMscorlib.dllには、アレイ内の2つの要素を比較することができませんでした。

なぜそれが機能しないのですか?リストやバイト配列をソートする方法はありますか?

+0

どのような種類のミックスですか? '.sort'はjavaです、あなたは' Sort'を意味しましたか?また、タグを迷惑メールにしないでください。もしこれがc#であれば、それだけをc#としてマークします。 – Gusman

+0

Javaコード –

+0

の回答を受け入れることができます。申し訳ありませんが、C#は良いです –

答えて

0

ArrayListに2バイトの配列を追加して並べ替えようとしています。並べ替えは比較ベースで実行されるため、実行時にアプリケーションは2つの配列間の優先順位を定義するための基準が欠落していると訴えます。

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()); 
} 
関連する問題