SequenceEqual数组比较
1、值类型数组比较
int[] dataA = new int[] { 0, 1, 2, 3, 4, 5 }; int[] dataB = new int[] { 0, 1, 2, 4, 3, 5 }; List<int> dataC = new List<int> { 0, 1, 2, 3, 4, 5 }; bool resultAB = dataA.SequenceEqual(dataB); bool resultAC = dataA.SequenceEqual(dataC); Console.WriteLine("AB内容是否相同:{0}", resultAB); Console.WriteLine("AC内容是否相同:{0}", resultAC);

2、引用类型数组比较
private class Parameter { public int ID { get; set; } public string Name { get; set; } } static void Main(string[] args) { Parameter[] dataA = new Parameter[] { new Parameter() { ID = 0, Name = "正一郎" }, new Parameter() { ID = 5, Name = "清次郎" }, }; Parameter[] dataB = new Parameter[] { new Parameter() { ID = 0, Name = "正一郎" }, new Parameter() { ID = 5, Name = "清次郎" }, }; Parameter[] dataC = new Parameter[] { new Parameter() { ID = 4, Name = "征史郎" }, }; bool resultAB = dataA.SequenceEqual(dataB); bool resultAC = dataA.SequenceEqual(dataC); Console.WriteLine("AB内容是否相同:{0}", resultAB); Console.WriteLine("AC内容是否相同:{0}", resultAC); Console.ReadKey(); }

不一致,因为比较的是地址
3、引用类型数组比较,数组里引用同一个对象
private class Parameter { public int ID { get; set; } public string Name { get; set; } } static void Main(string[] args) { Parameter valueA = new Parameter() { ID = 0, Name = "正一郎" }; Parameter valueB = new Parameter() { ID = 5, Name = "清次郎" }; Parameter valueC = new Parameter() { ID = 4, Name = "征史郎" }; Parameter[] dataA = new Parameter[] { valueA, valueB }; Parameter[] dataB = new Parameter[] { valueA, valueB }; Parameter[] dataC = new Parameter[] { valueC }; bool resultAB = dataA.SequenceEqual(dataB); bool resultAC = dataA.SequenceEqual(dataC); Console.WriteLine("AB内容是否相同:{0}", resultAB); Console.WriteLine("AC内容是否相同:{0}", resultAC); Console.ReadKey(); }

4、如果引用类型不是同一个地址,但是ID相同,也默许是一致的
private class Parameter { public int ID { get; set; } public string Name { get; set; } } private class ParameterComparer : IEqualityComparer<Parameter> { public bool Equals(Parameter i_lhs, Parameter i_rhs) { if (i_lhs.ID == i_rhs.ID && i_lhs.Name == i_rhs.Name) { return true; } return false; } public int GetHashCode(Parameter i_obj) { return i_obj.ID ^ i_obj.Name.GetHashCode(); } } static void Main(string[] args) { Parameter[] dataA = new Parameter[] { new Parameter() { ID = 0, Name = "正一郎" }, new Parameter() { ID = 5, Name = "清次郎" }, }; Parameter[] dataB = new Parameter[] { new Parameter() { ID = 0, Name = "正一郎" }, new Parameter() { ID = 5, Name = "清次郎" }, }; Parameter[] dataC = new Parameter[] { new Parameter() { ID = 4, Name = "征史郎" }, }; ParameterComparer comparer = new ParameterComparer(); bool resultAB = dataA.SequenceEqual(dataB, comparer); bool resultAC = dataA.SequenceEqual(dataC, comparer); Console.WriteLine("AB内容是否相同:{0}", resultAB); Console.WriteLine("AC内容是否相同:{0}", resultAC); Console.ReadKey(); }


浙公网安备 33010602011771号