Si j'ai une variable IEnumerator est-il possible d'avoir une fonction lambda qui le prend, l'avance avec MoveNext() et retourne la valeur courante à chaque fois qu'elle est appelée?Est-il possible d'avancer un énumérateur et d'obtenir sa valeur dans un lambda?
1
A
Répondre
4
e => e.MoveNext() ? e.Current : null
Cela avancera le recenseur et retourner la valeur actuelle, et retourner null lorsque l'énumération est terminée.
1
Une expression Lambda peut contenir des énoncés complexes, de sorte que vous pouvez effectuer les opérations suivantes:
Func<IEnumerator, object> f = ie => { ie.MoveNext(); return ie.Current; };
0
Est-ce ce que vous cherchez?
List<string> strings = new List<string>()
{
"Hello", "I", "am", "a", "list", "of", "strings."
};
IEnumerator<string> e = strings.GetEnumerator();
Func<string> f =() => e.MoveNext() ? e.Current : null;
for (; ;)
{
string str = f();
if (str == null)
break;
Console.Write(str + " ");
}
Le point d'un IEnumerator
est que vous obtenez déjà le sucre syntaxique pour y faire face:
foreach (string str in strings)
Console.Write(str + " ");
manipulation Même le recenseur regarde directement plus propre dans ce cas:
while (e.MoveNext())
Console.Write(e.Current + " ");
0
Extension Sur la solution d'Abe, vous pouvez également utiliser des fermetures pour contenir une référence à l'agent recenseur:
var iter = ((IEnumerable<char>)"hello").GetEnumerator();
//with closure
{
Func<object> f =
() =>
{
iter.MoveNext();
return iter.Current;
};
Console.WriteLine(f());
Console.WriteLine(f());
}
//without closure
{
Func<IEnumerator, object> f =
ie =>
{
ie.MoveNext();
return ie.Current;
};
Console.WriteLine(f(iter));
Console.WriteLine(f(iter));
}
Questions connexes
- 1. Comment déclarer un énumérateur TDictionary?
- 2. Est-ce mal de lancer un énumérateur d'une classe enfant vers un énumérateur d'une classe parente?
- 3. MVC et lambda pour créer un enregistrement
- 4. Comment convertir un tableau d'octets en sa valeur numérique (Java)?
- 5. Comment trier un std objet :: vecteur par sa valeur flottante
- 6. Cookie perd de sa valeur dans ASP.net
- 7. Exécuter un processus et renvoyer sa sortie standard dans VC++
- 8. codage valeur clé et sa capacité de script
- 9. Expressions lambda, comment rechercher dans un objet?
- 10. Concaténation chaque paramètre non vide et sa valeur
- 11. Comment obtenir l'occurrence totale d'une valeur dans sa propre requête?
- 12. Cette expression lambda est-elle possible?
- 13. Comment obtenir la valeur d'un Lambda MemberExpression
- 14. Une expression lambda est-elle possible?
- 15. Comment sélectionner un élément par sa valeur de texte dans une liste déroulante utilisant jQuery?
- 16. Flex: comment charger un fichier .swf et utiliser sa bibliothèque?
- 17. Est-il légal et possible d'accéder à la valeur de retour dans un bloc finally?
- 18. Où ConfigurationManager ConnectionStrings obtient-il sa valeur?
- 19. Comprendre le comportement d'injection utilisé avec un lambda dans Ruby
- 20. C# expressions Lambda et NHibernate
- 21. JS: Saisie d'une valeur TRUE dans une boîte rapide et ayant elle alerte sa variable
- 22. Comment empêcher un combobox de sélectionner un élément de sa liste dans wpf?
- 23. Dictonaries et Lambda dans une classe?
- 24. Trouver la clé de tableau dans php et changer sa valeur ou son contenu?
- 25. Comment créer un bloc réutilisable/proc/lambda dans Ruby?
- 26. Est-il possible d'obtenir un ItemRenderer personnalisé pour faire défiler le DataGrid plutôt que sa cellule?
- 27. SharpDevelop - mélanger C# et VB.NET dans un projet possible?
- 28. Est-il possible d'obtenir un core dump d'un processus en cours et de sa table de symboles?
- 29. Question sur LINQ et Lambda requery
- 30. Quand un contrôle dans un TemplateField ajouté par programmation a-t-il sa propriété 'ID'?