// Copyright (C) Stichting Deltares and State of the Netherlands 2025. All rights reserved. // // This file is part of Riskeer. // // Riskeer is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using System; using System.Collections.Generic; using System.Linq; namespace Core.Common.Util.Extensions { /// /// This class defines extension methods for . /// public static class EnumerableExtensions { /// /// Perform a certain action for each element in a sequence. /// /// The element type of the sequence. /// A sequence that contains elements to be acted upon. /// The action that should be performed on each element. /// Do not define an action that effect . /// Thrown when any input argument is null. public static void ForEachElementDo(this IEnumerable source, Action action) { if (source == null) { throw new ArgumentNullException(nameof(source)); } if (action == null) { throw new ArgumentNullException(nameof(action)); } foreach (T item in source) { action(item); } } /// /// Checks whether the elements from are not unique using the . /// /// The element type of the sequence. /// The type for the key. /// A sequence that contains elements to be acted upon. /// The key selector to validate uniqueness. /// true when duplicates are present in ; false otherwise. /// Thrown when any input argument is null. public static bool HasDuplicates(this IEnumerable source, Func keySelector) { if (source == null) { throw new ArgumentNullException(nameof(source)); } if (keySelector == null) { throw new ArgumentNullException(nameof(keySelector)); } return source.Select(keySelector).Count() != source.Select(keySelector).Distinct().Count(); } /// /// Checks whether the elements from have more than one unique /// value using the . /// /// The element type of the sequence. /// The type for the key. /// A sequence that contains elements to be acted upon. /// The key selector to validate uniqueness. /// true when there is more than one unique value in ; false otherwise. /// Thrown when any input argument is null. public static bool HasMultipleUniqueValues(this IEnumerable source, Func keySelector) { if (source == null) { throw new ArgumentNullException(nameof(source)); } if (keySelector == null) { throw new ArgumentNullException(nameof(keySelector)); } return source.Select(keySelector).Distinct().Count() > 1; } } }