1) Реализуйте свой класс списка, унаследовав его от List;
2) Добавьте событие вызываемое при добавление схожего объекта Obj;
3) Реализуйте метод Add (скрыв аналогичный метод базового класса), в случае добавления схожего объекта вызывайте событие DuplObjAdded.
public class DuplObjEventArgs : EventArgs
{
public DuplObjEventArgs(Obj duplObj)
{
DuplObj = duplObj;
}
public Obj DuplObj { get; private set; }
}
public class ObjList : List<Obj>
{
public EventHandler<DuplObjEventArgs> DuplObjAdded;
public ObjList() : base()
{
}
public new void Add(Obj newObj)
{
base.Add(newObj);
if (this.Any(s => s.group != newObj.group && s.x == newObj.x && s.y == newObj.y))
{
OnDuplObjAdded(newObj);
}
}
protected virtual void OnDuplObjAdded(Obj duplObj)
{
DuplObjAdded?.Invoke(this, new DuplObjEventArgs(duplObj));
}
}
static void Main(string[] args)
{
var Objects = new ObjList();
Objects.DuplObjAdded += (o,e) => Console.WriteLine("DuplObj group: {0} x: {1} y: {2}", e.DuplObj.group, e.DuplObj.x, e.DuplObj.y);
Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 1 });
Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 2 });
Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 2 });
Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 2 });
Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 3 });
Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 3 });
Console.ReadKey();
}