diff --git a/src/CycloneDX.Core/Models/Component.cs b/src/CycloneDX.Core/Models/Component.cs index 824309ac..21d83b7b 100644 --- a/src/CycloneDX.Core/Models/Component.cs +++ b/src/CycloneDX.Core/Models/Component.cs @@ -231,6 +231,12 @@ public override bool Equals(object obj) public bool Equals(Component obj) { + // quick check without Serializer for improved performance + if (obj == null || Name != obj.Name) + { + return false; + } + return Json.Serializer.Serialize(this) == Json.Serializer.Serialize(obj); } diff --git a/src/CycloneDX.Utils/Merge.cs b/src/CycloneDX.Utils/Merge.cs index 36c19596..2bbd0779 100644 --- a/src/CycloneDX.Utils/Merge.cs +++ b/src/CycloneDX.Utils/Merge.cs @@ -31,36 +31,12 @@ public List Merge(List list1, List list2) if (list2 is null) return list1; var result = new List(list1); - // We want to avoid the costly computation of the hashes if possible. - // Therefore, we use a nullable type. - var resultHashes = new List(list1.Count); - for (int i = 0; i < list1.Count; i++) - { - resultHashes.Add(null); - } foreach (var item in list2) { - int hash = item.GetHashCode(); - bool found = false; - for (int i = 0; i < result.Count; i++) - { - var resultItem = result[i]; - if (resultHashes[i] == null) - { - resultHashes[i] = resultItem.GetHashCode(); - } - int resultHash = resultHashes[i].Value; - if (hash == resultHash && item.Equals(resultItem)) - { - found = true; - break; - } - } - if (!found) + if (!(result.Contains(item))) { result.Add(item); - resultHashes.Add(hash); } }