Je vais avoir du mal à trouver la bonne syntaxe LINQ à utiliser pour le bloc itérateur suivant:bloc itérateur à LINQ
class Program
{
class Operation
{
public IEnumerable<Operation> NextOperations { get; private set; }
}
class Item { }
static Item GetItem(Operation operation)
{
return new Item();
}
static IEnumerable<Item> GetItems(IEnumerable<Operation> operations)
{
foreach (var operation in operations)
{
yield return GetItem(operation);
foreach (var item in GetItems(operation.NextOperations)) // recursive
yield return item;
}
}
static void Main(string[] args)
{
var operations = new List<Operation>();
foreach (var item in GetItems(operations))
{
}
}
}
Peut-être ce que je suis est aussi bon qu'il obtient? Pour ce code particulier, yield return
à l'intérieur d'un foreach
explicite est en effet la bonne solution?
Il existe des façons plus fantaisistes de compresser des séquences, mais je ne suis pas sûr qu'elles constituent une amélioration. –
Ce n'est pas vraiment zipper dans le sens normal. C'est plus comme une traversée d'arbre. – recursive
@recursive: Je pense que vous avez raison, mais je pense aussi que cela pourrait être * traité * comme un étrange cas spécial de zipping. Ne pas le dire * devrait *, cependant. –