/// <summary>
        /// Shuffles the given list using the given <see cref="SecureRandom"/> generator.
        /// </summary>
        /// <typeparam name="T">The type of the members in <paramref name="this"/>.</typeparam>
        /// <param name="this">The list to shuffle.</param>
        /// <param name="random">The random number generator to use.</param>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="this"/> or <paramref name="random"/> is <c>null</c>.</exception>
        /// <remarks>
        /// The implementation of <c>Shuffle</c> uses the Fisher¨CYates shuffle, as implemented by Durstenfeld -
        /// see http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle for details on this implementation.
        /// </remarks>
        public static void Shuffle <T>(this IList <T> @this, Random random)
        {
            @this.CheckParameterForNull("@this");
            random.CheckParameterForNull("random");

            var length = @this.Count;

            while (length > 1)
            {
                length--;
                var nextIndex = random.Next(length + 1);
                @this.Swap(nextIndex, length);
            }
        }