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;
}
}
}