Index: Ringtoets/Common/src/Ringtoets.Common.IO/SoilProfile/SoilLayer2DLoop.cs =================================================================== diff -u -r7585d2fd78627d94d55ffa16423af90a91e4efd4 -r0ae39cf7e804cdb6d5932d8d5aeced1e54febb60 --- Ringtoets/Common/src/Ringtoets.Common.IO/SoilProfile/SoilLayer2DLoop.cs (.../SoilLayer2DLoop.cs) (revision 7585d2fd78627d94d55ffa16423af90a91e4efd4) +++ Ringtoets/Common/src/Ringtoets.Common.IO/SoilProfile/SoilLayer2DLoop.cs (.../SoilLayer2DLoop.cs) (revision 0ae39cf7e804cdb6d5932d8d5aeced1e54febb60) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using System.Linq; using Core.Common.Base.Geometry; using Ringtoets.Common.IO.Properties; @@ -33,9 +34,15 @@ /// /// Creates a new instance of . /// + /// Thrown when is null. /// Thrown when do not form a loop. public SoilLayer2DLoop(Segment2D[] segments) { + if (segments == null) + { + throw new ArgumentNullException(nameof(segments)); + } + CheckValidLoop(segments); Segments = segments; @@ -82,5 +89,34 @@ return true; } + + private bool Equals(SoilLayer2DLoop other) + { + return Segments.SequenceEqual(other.Segments); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != GetType()) return false; + + return Equals((SoilLayer2DLoop) obj); + } + + public override int GetHashCode() + { + unchecked + { + var hashCode = 0; + + foreach (Segment2D segment in Segments) + { + hashCode = (hashCode * 397) ^ segment.GetHashCode(); + } + + return hashCode; + } + } } } \ No newline at end of file