我定义了一个:
            
byte[] a = new byte[15] { 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x6, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };MessageBox.Show(a.LongLength.ToString());
//十五个数组byte[] b=a.Distinct().ToArray();
//经过这个功能处理过后,有数据丢失了
            
MessageBox.Show(a.Distinct().ToArray().LongLength.ToString ()); 
//得到7位,这个也不对,应该有8位MessageBox.Show(b[0].ToString()); //1
MessageBox.Show(b[1].ToString()); //2
MessageBox.Show(b[2].ToString()); //3
MessageBox.Show(b[3].ToString()); //4
MessageBox.Show(b[4].ToString()); //5
MessageBox.Show(b[5].ToString()); //6
MessageBox.Show(b[6].ToString()); //0这个不应该是6的吗?为什么是零?
有什么方法以数组形式截取有效的内容?
我要的结果希望是:
得到这个值{ 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x6, 0x6};分不够再加,能解决就好!

解决方案 »

  1.   

    你这?Distinct就是唯一了
    http://msdn.microsoft.com/zh-cn/library/bb348436.aspx
      

  2.   

    static void Main(string[] args)
    {
        byte[] a = new byte[15] { 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x6, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };
        List<byte> b = new List<byte>(a);
        while (b.Count > 0 && b[b.Count - 1] == 0) b.RemoveAt(b.Count - 1);
        foreach (byte item in b)
        {
            Console.Write(item + " ");
        }
        Console.ReadKey();
    }
      

  3.   

    错误
        List<byte> b = new List<byte>(a);
    如何再转回byte[] 这个类,
    不然调用出错
    与“PL.PA.ByteTString(byte[])”最匹配的重载方法具有一些无效参数
    参数“1”: 无法从“System.Collections.Generic.List<byte>”转换为“byte[]”
      

  4.   

    你这?Distinct就是唯一了
    http://msdn.microsoft.com/zh-cn/library/bb348436.aspx
      

  5.   

    这个WHILE 如果是在 1W 个以上的数组的有点慢
      

  6.   

    只是这么个意思,自己优化一下。
    byte[] a = new byte[15] { 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x6, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };
    int i = a.Length;
    while (--i > 0 && a[i] == 0) ;
    i++;
    byte[] b = new byte[i];
    Array.Copy(a, b, i);这样就快了。
      

  7.   

    把数组里的0去掉?可以用linqfrom i in arr where i != 0 select i
      

  8.   

    Distinct得到的是唯一,怎么可能得到两个6的呀,当然是0啦