src/Microsoft.Extensions.Configuration.AzureAppConfiguration/Extensions/ListExtensions.cs (52 lines of code) (raw):

// Copyright (c) Microsoft Corporation. // Licensed under the MIT license. // using DnsClient.Protocol; using System; using System.Collections.Generic; using System.Linq; namespace Microsoft.Extensions.Configuration.AzureAppConfiguration.Extensions { internal static class ListExtensions { public static List<T> Shuffle<T>(this List<T> values) { var rdm = new Random(); int count = values.Count; for (int i = count - 1; i > 0; i--) { int swapIndex = rdm.Next(i + 1); if (swapIndex != i) { T value = values[swapIndex]; values[swapIndex] = values[i]; values[i] = value; } } return values; } public static List<SrvRecord> SortSrvRecords(this List<SrvRecord> srvRecords) { srvRecords.Sort((a, b) => { if (a.Priority != b.Priority) return a.Priority.CompareTo(b.Priority); if (a.Weight != b.Weight) return b.Weight.CompareTo(a.Weight); return 0; }); return srvRecords; } public static void AppendUnique<T>(this List<T> items, T item) { if (item == null) { throw new ArgumentNullException(nameof(item)); } T existingItem = items.FirstOrDefault(s => Equals(s, item)); if (existingItem != null) { // Remove duplicate item if existing. items.Remove(existingItem); } // Append to the end, keeping precedence. items.Add(item); } } }