У меня есть ConcurrentDictionary:
private static ConcurrentDictionary<int, string> _cd = new ConcurrentDictionary<int, string>();
Чтобы быть консервативным, фактический ключ, который будет использоваться для извлечения элементов, является объектом, но вместо этого я просто использую его хэш-код в качестве ключа, чтобы (потенциально большой) объект не являлся ключом:
public static string GetTheValue(Foo foo)
{
int keyCode = foo.GetHashCode(); // GetHashCode is overridden to guarantee uniqueness
string theValue = _cd.GetOrAdd(keyCode, FooFactory);
return theValue;
}
Однако при подготовке объекта на фабрике мне нужны различные свойства объекта Foo:
private static string FooFactory(Foo foo)
{
string result = null;
object propA = foo.A;
object propB = foo.B;
// ... here be magic to set result
return result;
}
Поскольку параметр valueFactory функции GetOrAdd () ожидает Func<int, string>
, выясняется, что я не могу передать ему свой объект Foo. Можно ли вообще это сделать?