using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; namespace ReadOnlyDictionaryLib { public static class DictionaryExtensions { public static IDictionary<TKey, TValue> AsReadOnlyx<TKey, TValue>(this IDictionary<TKey, TValue> a_source) { return new ReadOnlyDictionary<TKey, TValue>(a_source); } } public sealed class ReadOnlyDictionary<TKey, TValue> : IDictionary<TKey, TValue> { private IDictionary<TKey, TValue> m_dictionary; public ReadOnlyDictionary(IDictionary<TKey, TValue> a_source) { m_dictionary = a_source; } public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() { foreach (var item in m_dictionary) { yield return item; } } public bool ContainsKey(TKey a_key) { return m_dictionary.ContainsKey(a_key); } public bool TryGetValue(TKey a_key, out TValue a_value) { return m_dictionary.TryGetValue(a_key, out a_value); } public bool Contains(KeyValuePair<TKey, TValue> a_item) { return m_dictionary.Contains(a_item); } public void CopyTo(KeyValuePair<TKey, TValue>[] a_array, int a_arrayIndex) { m_dictionary.CopyTo(a_array, a_arrayIndex); } public TValue this[TKey a_key] { get { return m_dictionary[a_key]; } } public ICollection<TKey> Keys { get { return new ReadOnlyCollection<TKey>(new List<TKey>(m_dictionary.Keys)); } } public ICollection<TValue> Values { get { return new ReadOnlyCollection<TValue>(new List<TValue>(m_dictionary.Values)); } } public int Count { get { return m_dictionary.Count; } } public bool IsReadOnly { get { return true; } } void IDictionary<TKey, TValue>.Add(TKey a_key, TValue a_value) { throw new NotSupportedException(); } bool IDictionary<TKey, TValue>.Remove(TKey a_key) { throw new NotSupportedException(); } TValue IDictionary<TKey, TValue>.this[TKey a_key] { get { return this[a_key]; } set { throw new NotSupportedException(); } } void ICollection<KeyValuePair<TKey, TValue>>.Add(KeyValuePair<TKey, TValue> a_item) { throw new NotSupportedException(); } bool ICollection<KeyValuePair<TKey, TValue>>.Remove(KeyValuePair<TKey, TValue> a_item) { throw new NotSupportedException(); } void ICollection<KeyValuePair<TKey, TValue>>.Clear() { throw new NotSupportedException(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } }
2010-10-06
ReadOnlyDictionary
This is simple implementation of read only Dictionary:
Subskrybuj:
Komentarze do posta (Atom)
Brak komentarzy:
Prześlij komentarz