J'ai la fonction récursive suivante qui est utilisée pour rechercher un arbre hiérarchique et supprimer des objets trouvés dans une liste:Retrait de la liste récursive en C#
private List<Tag> RemoveInvalidTags(Device device, List<Tag> tags)
{
var childDevices = device.ChildDevices.Select(c => c.ChildDevice);
foreach (var child in childDevices)
{
tags.Remove(child.Tag);
RemoveInvalidTags(child, tags);
}
return tags;
}
Ce que je m'y attendais à faire est de retirer tous les enfants à ce niveau dans la liste des balises, appelez la fonction récursivement pour vos enfants, puis retournez cette liste au niveau précédent.
Est-ce que cela va passer la liste de balises par référence et modifier la liste originale passée? Ou devrais-je faire quelque chose le long des lignes de
validTags = CollectValidTags(child, tags);
et en additionnant toutes les listes retournées?
Veuillez expliquer -1. Cela ne me dérange pas, mais sans explication, cela ne sert à rien. –
Mon seul pointeur ici est de savoir comment vous vous référez à l'objet "liste" qui est passé par valeur. C'est trompeur au mieux. L'objet est ce qui est assis sur le tas. La référence est passée en valeur, oui, mais continuer à dire * list object * me semble étrange. BTW, j'ai enlevé le -1 après l'avoir relu. Je vous ai mal compris un peu en raison de la question que je mentionne ci-dessus la première fois. –
@ Ed S. J'espère que les modifications ont nettoyé cela. J'essayais de me concentrer sur le fait qu'un objet est ... lui-même, peu importe le nom (variable) qu'il passe. Cela commence quand même un peu fort. –