Considérer l'exigence à modifier un membre de données sur une ou plusieurs propriétés d'un objet qui est 5 ou 6 niveaux de profondeur.Remplacement de foreach imbriqué avec LINQ; modifier et mettre à jour une propriété au sein de
Il existe des sous-collections qui doivent être itérées pour accéder à la propriété nécessitant une inspection & modification.
Ici, nous appelons une méthode qui nettoie l'adresse d'un employé. Étant donné que nous changeons les données dans les boucles, l'implémentation actuelle a besoin d'une boucle for
pour empêcher l'exception:
ne peut pas affecter à « somevariable » parce qu'il est un « foreach itération variable »
Voilà l'algorithme actuel (obfusqué) avec foreach
imbriqué et un for
.
foreach (var emp in company.internalData.Emps)
{
foreach (var addr in emp.privateData.Addresses)
{
int numberAddresses = addr.Items.Length;
for (int i = 0; i < numberAddresses; i++)
{
//transform this street address via a static method
if (addr.Items[i].Type =="StreetAddress")
addr.Items[i].Text = CleanStreetAddressLine(addr.Items[i].Text);
}
}
}
Question: Peut-être cet algorithme réimplémentées LINQ? L'exigence est que la collection d'origine ait ses données modifiées par cet appel de méthode statique.
Mise à jour: Je pensais/me penchais vers une solution de type jQuery/selector. Je n'ai pas spécifiquement formulé cette question de cette façon. Je me rends compte que je dépassais cette idée (pas d'effets secondaires). Merci à tout le monde! S'il existe un moyen de réaliser un sélecteur jQuery, voyons!
merci. Les vôtres et les réponses de Merhdad étaient fonctionnellement identiques, mais j'ai vu le vôtre en premier :) Je pensais qu'il serait inutile de retaper ce code, mais je pensais qu'il était important de faire le point sur les effets secondaires –
LINQ n'est pas un SQL Server, bien que la mise en œuvre pour SQL diffère de celui à la. NET - Vous pouvez toujours changer les propriétés avec les deux ensembles (LINQ à SQL) et juste C# LINQ. – ppumkin