Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, xvost, Вы писали:
X>>А ты не спрашивай IsAlive. Ты сразу бери Target. Если объект уже помер, то Target будет null
А>Так нельзя. От класса кэш требуется следующая функциональность:
А>- проверка наличия объекта в кэше; А>- получение объекта по ключу (не должно быть null, т.е. если проверка показала что оно есть, следует вернуть объект) А>- автоматическое удаление неиспользуемых объектов
Тогда требования, которые предъявляются к кешу, противоречивы поскольку допускают описанную тобой ситуацию (Contains вернул true, а GetItem -- null).
Можно, правда, еще ввести понятие транзакции и установить, что ни один объект не может быть сколлекчен в ее рамках. И, соответсвенно, вызывать Contains и GetItem в рамках одной транзакции. Для того, чтобы это реализовать тебе скорее всего придется в начале транзакции дампить все элементы кеша в отдельную strong reference коллекцию, а в конце транзакции ее очищать.
...Полагаю, что все-таки, решение при котором GetItem возвращает null, лучше.