public override bool Equals(object obj) { if (!(obj is Triangle)) { return(false); } Triangle tr2 = obj as Triangle; double[] array1 = this.GetSidesLengths(); double[] array2 = tr2.GetSidesLengths(); HashSet <int> usedIndexes = new HashSet <int>(); for (int i = 0; i < array1.Length; i++) { for (int j = 0; j < array2.Length; j++) { if (!(usedIndexes.Contains(j))) { if (System.Math.Abs(array1[i] - array2[j]) < System.Double.Epsilon) { usedIndexes.Add(j); break; } } } } if (usedIndexes.Count == 3) { return(true); } return(false); }