private char GetNextRandomCharacter(List <RandomCharacterProvider> providers)
        {
            RandomCharacterProvider randomProvider = GetRandomProvider(providers);
            char result = randomProvider.GetNextRandomChar();

            return(result);
        }
        private RandomCharacterProvider GetRandomProvider(List <RandomCharacterProvider> providers)
        {
            List <int> providerCharacterCounts = providers.Select(prvd => prvd.Chracters.Length).ToList();
            int        allChractersCount       = providerCharacterCounts.Sum();

            int randomChracterIndex = Rand.Next(0, allChractersCount);

            int randomProviderIndex = -1;
            int charactersCountSum  = 0;

            do
            {
                randomProviderIndex++;
                charactersCountSum += providerCharacterCounts[randomProviderIndex];
            } while (charactersCountSum < randomChracterIndex);

            RandomCharacterProvider randomProvider = providers[randomProviderIndex];

            return(randomProvider);
        }