Вам не нужен словарь, поскольку то, что вы хотите сделать, можно сделать с помощью списка.
Поскольку вы используете Count + 1
в качестве нового идентификатора, вы можете добавить автоматически сгенерированный идентификатор к классу Point, и он станет лучше:
public class Point
{
static private int NextID;
int ID { get; }
public Point()
{
ID = NextID++;
}
}
List<Point> meshPoints = new List<Point>();
var meshPointA = new Point();
var meshPointB = new Point();
var meshPointC = new Point();
meshPoints.Add(meshPointA);
meshPoints.Add(meshPointB);
meshPoints.Add(meshPointC);
var meshPoint = meshPoints.Where(p => p.ID == 2).SingleOrDefault();
При этом у вас никогда не будетДублируемый идентификатор и конфликты при добавлении, вставке и удалении объектов.
С параметром 1 Макс не обеспечивает быстродействие.
С параметром 3 использование счетчика вызовет следующие проблемы: если вы добавите 4 балла в следующемсначала удалите два, затем добавьте один, последний будет иметь идентификатор 3, в то время как два оставшихся имеют 3 и 4 в качестве идентификатора ... так что вариант 2. лучше.
Если вы хотите словарь, вы можете сделатьто же самое, создав класс, встраивающий внутренний словарь, имеющий NextID и предлагающий методы, которые вы хотите предоставить, такие как Add, Remove, ContainsX, ID (Items.Keys), Points (Items.Values) и т. д. (Все, что вы хотите, чтобы управлять этой специализированной коллекцией):
public class PointsDictionary : IEnumerable<Point>
{
private readonly Dictionary<int, Point> Items = new Dictionary<int, Point>();
private int NextID;
public Point this[int index]
{
get { return Items.ContainsKey(index) ? Items[index] : null; }
set { ... }
}
public Dictionary<int, Point>.KeyCollection IDs
{
get { return Items.Keys; }
}
public Dictionary<int, Point>.ValueCollection Points
{
get { return Items.Values; }
}
public int Add(Point point)
{
int index = NextID++;
Items.Add(index, point);
return index;
}
...
}
Так что здесь, у вас будет сильный и чистый дизайн.