J'ai un panneau code> WPF (code> (comme Comment puis-je faire cela? Puis-je utiliser LINQ? P> Canvas code> par exemple) et je veux supprimer son
enfants code> uniquement si ces enfants sont de type < Code> T code>, par exemple tout de type
code>. p>
4 Réponses :
Certains LINQ:
panel1.Controls.OfType<Button>().ToList().ForEach((b) => b.Parent = null);
-1 panneau.Controls? Avez-vous testé? msdn.microsoft.com/en-us/library/system. windows.controls.pan el
-1 b> enfants.Oftype
bouton code>
Réessayez ... mais s'il vous plaît soyez sûr.
Toujours incorrecte. a) panneau1.control code> b) évaluation paresseux (
SELECT code> n'exécutera pas l'affectation null immédiatement)
Maintenant, pensez-vous vraiment que ce code est meilleur que la vieille boucle de la plaine? (Création d'une liste temporaire Juste pour pouvoir les utiliser à l'aide de foreach code>)
Le parent n'est pas en lecture seule et panneau.Controls existe-t-il - il renvoie un contrôleCollection.
@ L.b: C'est une question de préférence. Mais je suis d'accord, c'est un peu convaincu.
@Davenewza non ce n'est pas une préférence. Op vient de demander puis-je utiliser linq code>. Pas
comment le faire à Linq code>
@ L.b: Mais c'est vraiment une question de préférence quant à savoir si OP utilise Linq ou les anciennes boucles de vieilles. Je pense que cela revient à la familiarité et à la lisibilité de la syntaxe. Il ne cherchait pas spécifiquement une solution linq uniquement.
@davenewza "VS" VS " "
faire une comparaison de type. La partie délicate consiste à modifier une collection pendant que vous en boucle; Je l'ai fait en utilisant deux pour des boucles: edit strong> p> De cette façon est plus propre, en boucle de la fin de la collection, de sorte que Pour éliminer les éléments de l'intérieur de la boucle. p>
Le pour la boucle qui boucle à partir de la fin de la collection doit commencer par mypanel.children.count - 1 code>, sinon vous obtiendrez
indexoutOfrangeException code>.
ailer cela sur mon téléphone:
Cela ne fonctionnera pas depuis que vous ne pouvez pas supprimer des objets d'une collection tout en itération sur celui-ci avec pourvua.
Ah, quand feront-ils vs pour l'iphone afin que je puisse tester mon code d'abord = p
Vous pouvez utiliser Linq, c'est une façon de faire.
List<Button> toRemove = new List<Button>(); foreach (var o in canvas1.Children) { if (o is Button) toRemove.Add((Button)o); } for (int i = 0; i < toRemove.Count; i++) { canvas1.Children.Remove(toRemove[i]); }
Enfin, simple et correct. Merci! Quelques notes sur la performance?
@Nick Il n'y aura pas de différence de performance sur Linq et Normal, j'ai préféré Linq Way. C'est votre choix de décider lequel vous avez préféré
L'électeur en bas s'il vous plaît laissez un commentaire, s'il y a quelque chose qui ne va pas ici