Ответ 1
Возможно, вы ищете .NET 4 ConditionalWeakTable<TKey, TValue>
Я уверен, что это дублированный вопрос, но я не могу найти оригинал.
Я получаю некоторые объекты, которые мне нужно "прикрепить" некоторую информацию. В принципе, если этот объект когда-либо возвращается к одному и тому же фрагменту кода, мне нужно увидеть, что я видел его раньше.
т. что-то вроде этого:
Dictionary<WeakReference<ObjectType>, string> _Cache;
Обратите внимание на слабую ссылку там (я знаю, что WeakReference не является общим битом), мне нужно сделать ключ кеша слабой ссылкой, чтобы справиться с тем, что объекты GC'ed из моего контроля.
Теперь я могу сделать этот кеш полным слабых ссылок, но я, похоже, вспоминаю аналогичный тип системы, уже существующий в .NET, который был GC'ed автоматически рядом с объектом.
Обратите внимание, что я не помню накладных расходов на это, поэтому я обязательно прочитаю эту тему, прежде чем решать, является ли это хорошим/лучшим решением, чем мой собственный кеш. К сожалению, я не могу изменить объект, о котором идет речь, поэтому мне нужно отслеживать эту метаинформацию где-то еще.
Мои ограничения:
В принципе, что-то вроде:
PropertyAttacher.Attach(instance, "Name", name);
Я правильно помню? Каковы классы?
Возможно, вы ищете .NET 4 ConditionalWeakTable<TKey, TValue>
Возможно, вы можете создать dictionnary, индексированный RuntimeHelpers.GetHashCode.
От MSDN:
RuntimeHelpers.GetHashCode полезен в сценариях, где вас волнует идентичность объекта. Вернутся две строки с одинаковым содержимым разные значения для RuntimeHelpers.GetHashCode, потому что они разные строковые объекты, хотя их содержимое одинаковое.
EDIT: Решение @Simon Mourier кажется намного лучше.