Оптимизация словаря с классами в качестве ключа C#
Есть класс GeometryExtensions для методов расширения класса Segment. Он хранит в себе словарь, в котором по экземпляру Segment в роли ключа можно обратиться к цвету определенного сегмента. Но проблема в том, что когда программа перестает использовать сегменты, ссылка на них остается в ключе словаря. А так как существует хоть одна действительная ссылка на объект, сборщик мусора не удаляет его. Мне нужно реализовать автоматическое удаление сегментов из словаря, при этом имея доступ только к коду класса GeometryExtensions. Возможно, существуют альтернативные структуры данных, но я не смог найти такую, которая автоматически удаляет объекты с единственной ссылкой.
public static class GeometryExtensions
{
private static Dictionary<Segment, Color> segmentColors = new Dictionary<Segment, Color>();
public static void SetColor(this Segment segment, Color color)
{
segmentColors[segment] = color;
}
public static Color GetColor(this Segment segment)
{
if (segmentColors.ContainsKey(segment))
return segmentColors[segment];
return Color.Black;
}
}