Можете ли вы получить доступ к IEnumerable, поскольку вы возвращаете его?

Мой код ниже находит все простые числа ниже number, создавая список простых чисел и проверяя, делится ли следующее потенциальное простое число без остатка на какие-либо простые числа в списке.

Я пытаюсь изучить все тонкости yield return. Прямо сейчас у меня есть List<int> primes, который я использую внутри функции. Но я возвращаю те же данные через yield return. Итак, мой вопрос:

Могу ли я получить доступ к IEnumerable< int > изнутри функции, когда я ее создаю? Таким образом, я могу полностью удалить простые числа List< int >.

/// <summary>
/// Finds all primes below <paramref name="number"/>
/// </summary>
/// <param name="number">The number to stop at</param>
/// <returns>All primes below <paramref name="number"/></returns>
private static IEnumerable<long> PrimeNumbers(long number)
{
    yield return 2;
    List<long> primes = new List<long>(2);          

    for(long num = 3; num < number; num += 2)
    {

        //if any prime lower then num divides evenly into num, it isn't a prime
        //what I'm doing now
        if(!primes.TakeWhile(x => x < num).Any(x => num % x == 0))
        {
            primes.Add(num);
            yield return num;
        }

        //made-up syntax for what I'd like to do
        if(!this.IEnumerable<long>
               .TakeWhile(x => x < num).Any(x => num % x == 0))
        {
            yield return num;
        }
    }
}
6
задан Erik Philips 21 April 2012 в 03:17
поделиться