using System; using System.Collections.Generic; using System.Text; using System.Linq; using Xunit; using FluentAssertions; using System.Collections; namespace LinqStudy.Test.LinqToObject { /// /// 序列相等 /// public class SequenceEqualTest { #region SequenceEqual /// /// SequenceEqual /// 序列相等比较:所含项数量相同、内容相同、位置相同、引用类型则引用相同的对象,则两个序列相等。 /// [Fact] public void SequenceEqual_Test() { List sequence = new List() { new Person(){Id=1,Name="张三",Age=20}, new Person(){Id=1,Name="李四",Age=20}, new Person(){Id=1,Name="王五",Age=20}, }; List sequence1 = sequence; List sequence2 = sequence; Assert.True(sequence1.SequenceEqual(sequence2)); } /// /// 引用类型相等:项数量相同、内容相同、位置相同、引用对象相同 /// [Fact] public void SequenceEqual_Query_Test() { List sequence = new List() { new Person(){Id=1,Name="张三",Age=20}, new Person(){Id=2,Name="李四",Age=30}, new Person(){Id=3,Name="王五",Age=40}, }; //查询结果相同,引用对象也相同。 var sequence1 = sequence.Where(p => p.Id > 2); var sequence2 = sequence.Where(p => p.Age > 30); Assert.True(sequence1.SequenceEqual(sequence2)); } /// /// 值类型相等:项数量相同、内容相同、位置相同 /// [Fact] public void SequenceEqual_ValueType_Test() { List sequence1 = new List() { 1, 2, 3 }; List sequence2 = new List() { 1, 2, 3 }; Assert.True(sequence1.SequenceEqual(sequence2)); } /// /// 引用不同 /// [Fact] public void SequenceEqual_Reference_Test() { List sequence1 = new List() { new Person(){Id=1,Name="张三",Age=20}, new Person(){Id=1,Name="李四",Age=20}, }; List sequence2 = new List() { new Person(){Id=1,Name="张三",Age=20}, new Person(){Id=1,Name="李四",Age=20}, }; Assert.False(sequence1.SequenceEqual(sequence2)); } /// /// 内容不一样 /// [Fact] public void SequenceEqual_Content_Test() { List sequence1 = new List() { new Person(){Id=1,Name="张三",Age=20}, new Person(){Id=1,Name="李四",Age=20}, new Person(){Id=1,Name="王五",Age=20}, }; List sequence2 = new List() { new Person(){Id=1,Name="张三2",Age=20}, new Person(){Id=1,Name="李四",Age=20}, new Person(){Id=1,Name="王五",Age=20}, }; Assert.False(sequence1.SequenceEqual(sequence2)); } /// /// 数量不一样 /// [Fact] public void SequenceEqual_Count_Test() { List sequence1 = new List() { new Person(){Id=1,Name="张三",Age=20}, new Person(){Id=1,Name="李四",Age=20}, }; List sequence2 = new List() { new Person(){Id=1,Name="张三",Age=20}, }; Assert.False(sequence1.SequenceEqual(sequence2)); } /// /// 位置不同 /// [Fact] public void SequenceEqual_Position_Test() { List sequence1 = new List() { new Person(){Id=1,Name="张三",Age=20}, new Person(){Id=1,Name="李四",Age=20}, }; List sequence2 = new List() { new Person(){Id=1,Name="李四",Age=20}, new Person(){Id=1,Name="张三",Age=20}, }; Assert.False(sequence1.SequenceEqual(sequence2)); } /// /// 重载比较方法,实现自动义比较 /// [Fact] public void SequenceEqual_OverrideEquals_Test() { List sequence1 = new List() { new StudentOverriteEquals(){Id=1,Name="张三",Age=20}, new StudentOverriteEquals(){Id=1,Name="李四",Age=20}, }; List sequence2 = new List() { new StudentOverriteEquals(){Id=1,Name="李四",Age=20}, new StudentOverriteEquals(){Id=1,Name="张三",Age=20}, }; Assert.True(sequence1.SequenceEqual(sequence2)); } /// /// 提供自定义比较器 /// [Fact] public void SequenceEqual_CustomEqual_Test() { List sequence1 = new List() { new Person(){Id=1,Name="张三",Age=20}, new Person(){Id=1,Name="李四",Age=20}, }; List sequence2 = new List() { new Person(){Id=1,Name="张三",Age=20}, new Person(){Id=1,Name="李四",Age=20}, }; Assert.True(sequence1.SequenceEqual(sequence2, new PersonEqualityComparer())); } #endregion } }