Sono uno sviluppatore VB.Net, una specie di novizio in C#, Mentre cercavo nella documentazione C# che avevo trovato tra Iterators e Generators, non riuscivo a capire appieno l'uso, Vi sono chiunque che può spiegare (se possibile)Che cosa sono Iteratori e generatori C# e come potrei utilizzarli
risposta
Iterator sono un modo semplice per generare una sequenza di elementi, senza dover implementare IEnumerable<T>
/IEnumerator<T>
da soli. Un iteratore è un metodo che restituisce un IEnumerable<T>
che è possibile enumerare in un ciclo foreach.
Ecco un semplice esempio:
public IEnumerable<string> GetNames()
{
yield return "Joe";
yield return "Jack";
yield return "Jane";
}
foreach(string name in GetNames())
{
Console.WriteLine(name);
}
Nota le yield return
dichiarazioni: queste affermazioni in realtà non restituito dal metodo, hanno solo "spingere" l'elemento successivo a chi sta leggendo l'attuazione.
Quando il compilatore rileva un blocco iteratore, in realtà lo riscrive su una macchina a stati in una classe che implementa IEnumerable<T>
e IEnumerator<T>
. Ogni istruzione yield return
nell'iteratore corrisponde a uno stato in quella macchina a stati.
Vedere this article di Jon Skeet per ulteriori dettagli sugli iteratori.
Sarebbe utile vedere un esempio di quando potrebbe essere necessario farlo. Il tuo semplice esempio qui potrebbe essere semplicemente sostituito con una serie di stringhe, se l'obiettivo è solo quello di consentire l'enumerazione su "Joe" "Jack" e "Jane"? – MarkJ
Sì, questo esempio non è molto utile, potresti invece usare facilmente un array. Per ulteriori esempi utili, vedere [La serie di Jon Skeet su Reimplementare Linq to Objects] (http://msmvps.com/blogs/jon_skeet/archive/tags/Edulinq/default.aspx);) –
Gli iteratori vengono spesso utilizzati per attraversare elenchi di tipi diversi. Iterator sono chiamati Enumerators in .net. Un'altra domanda riguardante gli iteratori: http://stackoverflow.com/questions/1227283/why-do-we-need-iterators-in-c – jgauffin