');

C# Language Risoluzione anticipata

Esempio

È possibile estendere la funzionalità dei metodi di yield esistenti passando uno o più valori o elementi che potrebbero definire una condizione di terminazione all'interno della funzione chiamando un'interruzione di yield break per interrompere l'esecuzione del ciclo interno.

public static IEnumerable<int> CountUntilAny(int start, HashSet<int> earlyTerminationSet)
{
    int curr = start;

    while (true)
    {
        if (earlyTerminationSet.Contains(curr))
        {
            // we've hit one of the ending values
            yield break;
        }

        yield return curr;

        if (curr == Int32.MaxValue)
        {
            // don't overflow if we get all the way to the end; just stop
            yield break;
        }

        curr++;
    }
}

Il metodo sopra riportato itererà da una data posizione di start fino a earlyTerminationSet si incontra uno dei valori all'interno del primo earlyTerminationSet .

// Iterate from a starting point until you encounter any elements defined as 
// terminating elements
var terminatingElements = new HashSet<int>{ 7, 9, 11 };
// This will iterate from 1 until one of the terminating elements is encountered (7)
foreach(var x in CountUntilAny(1,terminatingElements))
{
    // This will write out the results from 1 until 7 (which will trigger terminating)
    Console.WriteLine(x);
}

Produzione:

1
2
3
4
5
6

Live Demo su .NET Fiddle