public class test
{
public string name;
public int number;
}
private void button1_Click(object sender, EventArgs e)
{
List liste = new List();
liste.Add(new test { name = "Premier", number = 1 });
liste.Add(new test { name = "Second", number = 2 });
liste.Add(new test { name = "Troisième", number = 3 });
liste.Add(new test { name = "Quatrième", number = 4 });
liste.Add(new test { name = "Cinquième", number = 5 });
liste.Add(new test { name = "Sixième", number = 6 });
var result = from l in liste
where (l.number % 2 == 0)
select l;
foreach (var val in result)
Console.WriteLine(val.name);
}
Résultat :
[quote=""]
Second
Quatrième
Sixième
[/quote]
J'adore C# 3 :love:
Edité le 22/03/2008 à 18:02
Effectivement c’est plus ou moins le cas (selon certains autres paramètres). Ce qui m’a d’ailleurs forcé à temporiser ces suppressions (modifier une liste pendant qu’on itère dessus c’est pas super).
Mais une suppression peut également survenir dans d’autres cas.
En tout cas merci ça va simplifier mon code
(Pour info, il s’agit d’un petit système de détection de collisions dans un jeu)
Bah voilà : c’est implémenté et ça marche très bien (c’était surtout le problème de l’équivalence action(a, b) <=> action(b, a) qui me « gênait » le plus :
for(int item1_idx = 0; item1_idx < (list.Count - 1); ++item1_idx) { // Itération sur les n-2 premièrs items
MyObject item1 = list[item1_idx];
for (int item2_idx = item1_idx + 1; item2_idx < list.Count; ++item2_idx) { // Itération sur les items situées après `item1`
MyObject item2 = list[item2_idx];
action(item1, item2);
}
}