# System.Collections.Concurrent

``` diff
 namespace System.Collections.Concurrent {
     public class ConcurrentDictionary<TKey, TValue> : ICollection, ICollection<KeyValuePair<TKey, TValue>>, IDictionary, IDictionary<TKey, TValue>, IEnumerable, IEnumerable<KeyValuePair<TKey, TValue>>, IReadOnlyCollection<KeyValuePair<TKey, TValue>>, IReadOnlyDictionary<TKey, TValue> {
+        public ConcurrentDictionary.AlternateLookup<TAlternateKey> GetAlternateLookup<TAlternateKey>();
+        public bool TryGetAlternateLookup<TAlternateKey>(out ConcurrentDictionary.AlternateLookup<TAlternateKey> lookup);
+        public readonly struct AlternateLookup<TAlternateKey> {
+            public ConcurrentDictionary<TKey, TValue> Dictionary { get; }
+            public TValue this[TAlternateKey key] { get; set; }
+            public bool ContainsKey(TAlternateKey key);
+            public bool TryAdd(TAlternateKey key, TValue value);
+            public bool TryGetValue(TAlternateKey key, out TKey actualKey, out TValue value);
+            public bool TryGetValue(TAlternateKey key, out TValue value);
+            public bool TryRemove(TAlternateKey key, out TKey actualKey, out TValue value);
+            public bool TryRemove(TAlternateKey key, out TValue value);
+        }
     }
 }
```

