Обычно по строкам из:
Код: Выделить всё
private readonly ConcurrentDictionary someObjectCache =
new ConcurrentDictionary();
public ISomeObject CreateSomeObject(Type someType)
{
return someObjectCache.GetOrAdd(someType, type =>
{
if(!Attribute.IsDefined(someType, typeof(SomeAttribute))
// Do something here to avoid the instance from being added to
// `someObjectCache`
ISomeObject someObject;
// Typical factory functionality goes here
return someObject;
});
}
Основываясь на моем опыте работы с другими методами, подобными LINQ, возврат null приведет к добавлению значения без проверки как таковой (и чтение IL для GetOrAdd похоже, что это приведет к той же проблеме), поэтому я не думаю, что это приведет работает.
Есть ли способ избежать использования исключений для отмены добавления с помощью GetOrAdd?
Подробнее здесь: https://stackoverflow.com/questions/990 ... dd-a-value