using System; using System.Collections.Generic; using System.Configuration; using System.Linq; namespace Umbraco.Core.Configuration.HealthChecks { [ConfigurationCollection(typeof(NotificationMethodElement), AddItemName = "notificationMethod")] public class NotificationMethodsElementCollection : ConfigurationElementCollection, IEnumerable, IReadOnlyDictionary { protected override ConfigurationElement CreateNewElement() { return new NotificationMethodElement(); } protected override object GetElementKey(ConfigurationElement element) { return ((NotificationMethodElement)(element)).Alias; } IEnumerator> IEnumerable>.GetEnumerator() { for (var i = 0; i < Count; i++) { var val = (NotificationMethodElement)BaseGet(i); var key = (string)BaseGetKey(i); yield return new KeyValuePair(key, val); } } IEnumerator IEnumerable.GetEnumerator() { for (var i = 0; i < Count; i++) { yield return (NotificationMethodElement)BaseGet(i); } } bool IReadOnlyDictionary.ContainsKey(string key) { return ((IReadOnlyDictionary) this).Keys.Any(x => x == key); } bool IReadOnlyDictionary.TryGetValue(string key, out INotificationMethod value) { try { var val = (NotificationMethodElement)BaseGet(key); value = val; return true; } catch (Exception) { value = null; return false; } } INotificationMethod IReadOnlyDictionary.this[string key] { get { return (NotificationMethodElement)BaseGet(key); } } IEnumerable IReadOnlyDictionary.Keys { get { return BaseGetAllKeys().Cast(); } } IEnumerable IReadOnlyDictionary.Values { get { for (var i = 0; i < Count; i++) { yield return (NotificationMethodElement)BaseGet(i); } } } } }