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);) –
- 1. Cosa sono gli iteratori di SCARY?
- 2. Cosa sono [e] in C#?
- 3. C# puntatori, iteratori e generici
- 4. Cosa sono i ResourceContainer e come utilizzarli per gli endpoint del cloud?
- 5. C++ costruttori espliciti e iteratori
- 6. Generatori ES6: trasformazione dei callback agli iteratori
- 7. Cosa sono NSBundle e mainBundle nell'obiettivo C?
- 8. iteratori fail safe e iteratori debolmente coerenti
- 9. Come sono collegati gli iteratori e i puntatori?
- 10. Eventi .NET - Cosa sono gli oggetti mittente e EventArgs e?
- 11. Come posso ottenere i generatori/iteratori da valutare come False quando sono esauriti?
- 12. C++ iteratori e ottimizzazione del ciclo
- 13. Che cosa sono gli script @section e a cosa serve
- 14. Perché XSD.EXE crea due file .XSD e come utilizzarli?
- 15. Che cosa è e = e | =
- 16. Cosa sono `+:` e `-:`?
- 17. Generatori Mongoid e ActiveRecord
- 18. Scala - iteratori e TakeWhile
- 19. Programmazione strutturata e generatori Python?
- 20. Cosa sono 1LL o 2LL in C e C++?
- 21. Cosa è asincrono e attendi e quando vorresti utilizzarli nello sviluppo di Windows?
- 22. sono generatori supportati in RPython?
- 23. Cosa sono TestExecutionListeners e cosa fanno?
- 24. Cosa sono ReservedCodeCacheSize e InitialCodeCacheSize?
- 25. Cosa sono oaidl.idl e ocidl.idl?
- 26. Cosa rende i generatori di siti statici come Jekyll e Hyde migliori di XML e XSLT?
- 27. Cosa sono aspnet50 e aspnetcore50?
- 28. cosa sono class_setIvarLayout e class_getIvarLayout?
- 29. NSComparisonResult e NSComparator - cosa sono?
- 30. Cosa sono Eff e Aff?
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