diff --git a/LinqStudy.Test/LinqToObject/SequenceEqualTest.cs b/LinqStudy.Test/LinqToObject/SequenceEqualTest.cs
new file mode 100644
index 0000000..981c1ea
--- /dev/null
+++ b/LinqStudy.Test/LinqToObject/SequenceEqualTest.cs
@@ -0,0 +1,248 @@
+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
+ {
+ ///
+ /// 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 Student(){Id=1,Name="张三",Age=20},
+ new Student(){Id=1,Name="李四",Age=20},
+ };
+
+ List sequence2 = new List()
+ {
+ new Student(){Id=1,Name="李四",Age=20},
+ new Student(){Id=1,Name="张三",Age=20},
+ };
+
+ Assert.True(sequence1.SequenceEqual(sequence2));
+ }
+
+ ///
+ /// 提供自定义比较器
+ ///
+ [Fact]
+ public void 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 PersonEqual()));
+ }
+
+ ///
+ /// 自定义Person比较器
+ /// Id相同,则表示同一个对象
+ ///
+ private class PersonEqual : IEqualityComparer
+ {
+ bool IEqualityComparer.Equals(Person x, Person y)
+ {
+ if (x==null || y==null)
+ {
+ return false;
+ }
+
+ return x.Id == y.Id;
+ }
+
+ int IEqualityComparer.GetHashCode(Person obj)
+ {
+ return obj.Id.GetHashCode();
+ }
+ }
+
+ ///
+ /// 重写比较方法
+ ///
+ private class Student
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+
+ public int Age { get; set; }
+
+ public override bool Equals(object obj)
+ {
+ var other = obj as Student;
+ if (other == null)
+ {
+ return false;
+ }
+
+ return Id==other.Id;
+ }
+
+ public override int GetHashCode()
+ {
+ return this.Id.GetHashCode();
+ }
+ }
+ }
+}