SequenceEqual是对数组的比较,可以取得连续性的一段进行比较,比较也可以引入compare类定义规则。
以下是在一个byte数组中找到另外一个byte数组的全部匹配。
/// <summary>
/// Search byte array index
/// </summary>
/// <param name="sourceBytes">source bytes</param>
/// <param name="searchBytes">search bytes</param>
/// <param name="startPos">position offset</param>
/// <returns>index</returns>
public static int SearchByteArrayIndex(byte[] sourceBytes, byte[] searchBytes, int startPos = 0)
{
int index = -1;
for (int i = startPos; i < sourceBytes.Length; i++)
{
if (sourceBytes.Skip(i).Take(searchBytes.Length).SequenceEqual(searchBytes))
{
index = i;
break;
}
}
return index;
}
可以运用compare,定义比较的方法
[TestMethod()]
public void DeserializeTest()
{
Person _personA = new Person() { Name = "YanZhiweiA", Age = 10, Address = "shanghaiA" };
Person _personB = new Person() { Name = "YanZhiweiB", Age = 11, Address = "shanghaiB" };
List<Person> _expected = new List<Person>();
_expected.Add(_personA);
_expected.Add(_personB);
string _jsonString = "[{‘Name‘:‘YanZhiweiA‘,‘Age‘:10,‘Address‘:‘shanghaiA‘},{‘Name‘:‘YanZhiweiB‘,‘Age‘:11,‘Address‘:‘shanghaiB‘}]";
List<Person> _result = (List<Person>)JavaScriptSerializerHelper.Deserialize<Person>(_jsonString);
bool _actual = _expected.SequenceEqual(_result, new PersonCompare());
Assert.IsTrue(_actual);
}
public class PersonCompare : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
return (x.Age == y.Age) && (x.Address == y.Address) && (x.Name == y.Name);
}
public int GetHashCode(Person obj)
{
return obj.Name.GetHashCode();
}
}