public abstract class FieldObjects<T> : ConcurrentDictionary<int, T> where T : FieldObject
{
public Field Field { get; private set; }
public FieldObjects(Field field)
: base()
{
this.Field = field;
}
public virtual void Add(T value)
{
value.Field = this.Field;
value.ObjectId = this.Field.AssignObjectId();
this.AddOrUpdate(value.ObjectId, value, null);
}
public virtual void Remove(T value)
{
value.Field = null;
value.ObjectId = -1;
this.TryRemove(value.ObjectId, out value);
}
public IEnumerable<T> GetInRange(FieldObject reference, int range)
{
foreach (T fieldObject in this.Values)
{
if (reference.Position.DistanceFrom(fieldObject.Position) <= range)
{
yield return fieldObject;
}
}
}
}
I have this abstract class. I want to be able to iterate over it's values (not a KeyValuePair, but values only) in a safe way so I don't have to use the lock
statement every-time. How can I do that?