В соответствии с этим решением ({ ссылка }) я использую ConcurrentDictionary<T,byte>
в качестве обходного пути из-за отсутствия ConcurrentHashSet<T>
. Тем не менее, я изо всех сил пытаюсь понять, как я могу вернуть оригинал T Key
из словаря за O (1) раз.
var cache = new ConcurrentDictionary<MyEquatableClass, byte>());
//...
if(!cache.TryAdd(classInstance, Byte.MinValue))
return /* Existing cache entry */;
return classInstance;
Есть ли способ получить KeyValuePair<K,V>
(или даже просто ключ) для записи ConcurrentDictionary<K,V>
, дав ей эквивалентный (IEquatable) ключ, не перечисляя его за O (n) время?
Моя проблема возникает из-за того, что объекты, которые я использую в качестве ключей IEquatable<K>
друг для друга, но не ReferenceEqual
друг для друга. Если myDict.ContainsKey(someEquatable)
, я хочу получить исходный экземпляр ключа в словаре (а также значение, сохраненное вместе с ним) и выбросить мой текущий (дублированный) экземпляр.