From fa145644d1be000fcd0c006485f642670e2fdf79 Mon Sep 17 00:00:00 2001 From: Chris Cameron Date: Wed, 25 Jul 2018 11:59:00 -0400 Subject: [PATCH] feat: Extension method for getting a random item from a sequence --- .../Extensions/EnumerableExtensions.cs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/ICD.Common.Utils/Extensions/EnumerableExtensions.cs b/ICD.Common.Utils/Extensions/EnumerableExtensions.cs index fe156e2..174dc85 100644 --- a/ICD.Common.Utils/Extensions/EnumerableExtensions.cs +++ b/ICD.Common.Utils/Extensions/EnumerableExtensions.cs @@ -851,6 +851,28 @@ namespace ICD.Common.Utils.Extensions return extends.Distinct(new PredicateEqualityComparer(propertyComparer, getProperty)); } + /// + /// Returns a random item from the given sequence. + /// + /// + /// + /// + public static T Random(this IEnumerable extends) + { + if (extends == null) + throw new ArgumentNullException("extends"); + + IList sequence = extends as IList ?? extends.ToArray(); + + if (sequence.Count == 0) + throw new InvalidOperationException("Sequence is empty."); + + Random random = new Random(Guid.NewGuid().GetHashCode()); + int index = random.Next(0, sequence.Count); + + return sequence[index]; + } + /// /// Returns other if the sequence is empty. /// Returns other if the sequence is non-empty and there are two different elements.