C# 比较两个List byte集合、byte[]是否相同

首次发布:2018-04-28
public bool AreByteArraysEqual(byte[] a, byte[] b)
{
    if (a == null || b == null || a.Length != b.Length)
    {
        return false;
    }
    for (int i = 0; i < a.Length; i++)
    {
        if (a[i] != b[i])
        {
            return false;
        }
    }
    return true;
}

public bool AreByteListEqual(List<byte> a, List<byte> b)
{
    if (a == null || b == null || a.Count != b.Count)
    {
        return false;
    }
    for (int i = 0; i < a.Count; i++)
    {
        if (a[i] != b[i])
        {
            return false;
        }
    }
    return true;
}


List<byte> l1=new List<byte>{0x01,0x02,0x03}

List<byte> l2=new List<byte>{0x01,0x02,0x03}

//上面l1和l2内容是一样的

l1==l2;//这样返回为假
l1.Equals(l2);//这样也为假
l1.SequenceEqual(l2);//这样才为真   Linq 自带函数SequenceEqual 查看内容是否一样


//====================================================================================
//2019-05-02 更新
//有的时候  两个集合内容一样 但是  集合内元素顺序不一样,用以上方法判断都是false
//以下是解决  判断两个集合的所有元素都否都一样
List<byte> l3=new List<byte>{0x11,0x22,0x03}
List<byte> l4=new List<byte>{0x22,0x11,0x03}

bool b1 = l4.All(l3.Contains);
//判断l3里面是否都包含l4里面的所有元素这里为true
//如果l3里面的元素为{0x11,0x22,0x03,0x04} 比l4{0x22,0x11,0x03}多一个元素  这里也为true 
//如果l3里面的元素为{ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11 } 比l4{0x22,0x11,0x03}多6一个元素  这里也为true 
//如里l4里面元素为{0x22,0x11,0x03,0x04} l3里面元素为{0x11,0x22,0x03} 则b1为false

bool b3 = l3.SequenceEqual(l4); //结果为false
//l3和l4里面内容都一样 但顺序不一样 如果像上面 l1和l2内容和顺序也一样则为true