diff --git a/src/Grpc.Net.Client/Balancer/BalancerAttributes.cs b/src/Grpc.Net.Client/Balancer/BalancerAttributes.cs index 86dd2b37e..7f4d42a82 100644 --- a/src/Grpc.Net.Client/Balancer/BalancerAttributes.cs +++ b/src/Grpc.Net.Client/Balancer/BalancerAttributes.cs @@ -17,6 +17,7 @@ #endregion #if SUPPORT_LOAD_BALANCING +using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; @@ -29,7 +30,7 @@ namespace Grpc.Net.Client.Balancer; /// Note: Experimental API that can change or be removed without any prior notice. /// /// -public sealed class BalancerAttributes : IDictionary +public sealed class BalancerAttributes : IDictionary, IReadOnlyDictionary { /// /// Gets a read-only collection of metadata attributes. @@ -61,22 +62,28 @@ private BalancerAttributes(IDictionary attributes) _attributes[key] = value; } } + ICollection IDictionary.Keys => _attributes.Keys; ICollection IDictionary.Values => _attributes.Values; int ICollection>.Count => _attributes.Count; - bool ICollection>.IsReadOnly => ((IDictionary)_attributes).IsReadOnly; + bool ICollection>.IsReadOnly => _attributes.IsReadOnly; + IEnumerable IReadOnlyDictionary.Keys => _attributes.Keys; + IEnumerable IReadOnlyDictionary.Values => _attributes.Values; + int IReadOnlyCollection>.Count => _attributes.Count; + object? IReadOnlyDictionary.this[string key] => _attributes[key]; void IDictionary.Add(string key, object? value) => _attributes.Add(key, value); - void ICollection>.Add(KeyValuePair item) => ((IDictionary)_attributes).Add(item); + void ICollection>.Add(KeyValuePair item) => _attributes.Add(item); void ICollection>.Clear() => _attributes.Clear(); - bool ICollection>.Contains(KeyValuePair item) => ((IDictionary)_attributes).Contains(item); + bool ICollection>.Contains(KeyValuePair item) => _attributes.Contains(item); bool IDictionary.ContainsKey(string key) => _attributes.ContainsKey(key); - void ICollection>.CopyTo(KeyValuePair[] array, int arrayIndex) => - ((IDictionary)_attributes).CopyTo(array, arrayIndex); + void ICollection>.CopyTo(KeyValuePair[] array, int arrayIndex) => _attributes.CopyTo(array, arrayIndex); IEnumerator> IEnumerable>.GetEnumerator() => _attributes.GetEnumerator(); - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => ((System.Collections.IEnumerable)_attributes).GetEnumerator(); + IEnumerator System.Collections.IEnumerable.GetEnumerator() => ((System.Collections.IEnumerable)_attributes).GetEnumerator(); bool IDictionary.Remove(string key) => _attributes.Remove(key); - bool ICollection>.Remove(KeyValuePair item) => ((IDictionary)_attributes).Remove(item); + bool ICollection>.Remove(KeyValuePair item) => _attributes.Remove(item); bool IDictionary.TryGetValue(string key, out object? value) => _attributes.TryGetValue(key, out value); + bool IReadOnlyDictionary.ContainsKey(string key) => _attributes.ContainsKey(key); + bool IReadOnlyDictionary.TryGetValue(string key, out object? value) => _attributes.TryGetValue(key, out value); /// /// Gets the value associated with the specified key.