.NET 4 : enrichir List<T> d'un évènement
Bonjour,
Juste pour faire part d'une chose qui peut être utile à certains et qui pourrait pourquoi pas entrer dans les contributions :)
J'ai eu besoin d'utiliser une liste qui lance un évènement avant suppression d'un ou plusieurs éléments de cette liste (à la manière des triggers en base de données).
J'ai donc créé ces deux classes :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| public class BeforeRemoveEventArgs : EventArgs
{
public BeforeRemoveEventArgs(object item)
{
this.item = item;
}
public object item;
}
public class ListTrigerred<T> : List<T>
{
public delegate void BeforeRemoveEventHandler(object sender, BeforeRemoveEventArgs e);
public event BeforeRemoveEventHandler BeforeRemove;
public new bool Remove(T item)
{
if (BeforeRemove != null)
{
List<T> l = new List<T>();
l.Add(item);
BeforeRemove(this, new BeforeRemoveEventArgs(l));
}
return base.Remove(item);
}
public new int RemoveAll(Predicate<T> match)
{
if (BeforeRemove != null)
BeforeRemove(this, new BeforeRemoveEventArgs(this.FindAll(match)));
return base.RemoveAll(match);
}
} |
L'utilisation se fait comme suit :
Code:
1 2 3 4 5 6 7 8
|
public ListTrigerred<Point> lsPoints = new ListTrigerred<Point>();
lsPoints.BeforeRemove += delegate(object sender, BeforeRemoveEventArgs e)
{
List<Point> PointsToRemove = (List<Point>)e.item;
// TODO : implémenter les actions à effectuer avant la suppression des points
}; |
J'ai utilisé une méthode anonyme pour condenser le code mais vous pouvez bien évidemment utiliser une fonction ou autres!
Le type Point peut être remplacé par n'importe quel type.
Bon dév,
Arnaud D.