a question concernant une méthode d'extension que je l'ai écrit qui ressemble à ceci:ControlCollection optimisation de la méthode d'extension
public static IEnumerable<T> FindControlsOfType<T>(this ControlCollection instance) where T : class
{
T control;
foreach (Control ctrl in instance)
{
if ((control = ctrl as T) != null)
{
yield return control;
}
foreach (T child in FindControlsOfType<T>(ctrl.Controls))
{
yield return child;
}
}
}
public static IEnumerable<T> FindControlsOfType<T>(this ControlCollection instance, Func<T, bool> match) where T : class
{
return FindControlsOfType<T>(instance).Where(match);
}
L'idée ici est de trouver tous les contrôles qui correspondent à un critère spécifques (d'où le Func < ..>) dans la collection de contrôles. Ma question est:
Est-ce que la deuxième méthode (qui a le Func) d'abord appeler la première méthode pour trouver tous les contrôles de type T et exécute alors la condition where ou ne le « exécution » d'optimiser l'appel pour effectuer le où condition sur l'énumération "entière" (si vous obtenez ce que je veux dire).
Deuxièmement, y at-il d'autres optimisations que je peux faire au code pour mieux fonctionner.
Un exemple peut ressembler à ceci:
var checkbox = this.Controls.FindControlsOfType<MyCustomCheckBox>(
ctrl => ctrl.CustomProperty == "Test"
)
.FirstOrDefault();
Pour le problème de performance, peut-être jeter un oeil à: http://msmvps.com/blogs/jon_skeet/archive/2010/03/25/just-how-lazy-are-you.aspx – Oliver
juste ce que j'étais vous cherchez - m'a sauvé du temps, merci –