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();
        }

 

posted @ 2022-02-24 15:58  江境纣州  阅读(53)  评论(0编辑  收藏  举报