Parent Directory
|
Revision Log
|
Patch
--- trunk/libxmltv/Core/PropertyDictionary.cs 2013/03/10 08:44:53 93 +++ trunk/libxmltv/Core/PropertyDictionary.cs 2013/03/10 11:35:26 105 @@ -17,7 +17,20 @@ public PropertyCollection() : this(new List<T>()) { } public PropertyCollection(ICollection<T> collection) { foreach (var t in collection) { items.Add(t); } } public int PropertyCount { get { return items.Count; } } - public bool IsReadOnly { get { return (items as ICollection<T>).IsReadOnly; } } + + public bool IsReadOnly + { + get + { + ICollection<T> collection = (items as ICollection<T>); + if (collection == null) + { + throw new InvalidCastException(string.Format("Unable to cast: '{0}' to '{1}'", items.GetType().Name, typeof(ICollection<T>).Name)); + } + return collection.IsReadOnly; + } + } + public void AddProperty(T item) { items.Add(item); } public void ClearProperties() { items.Clear(); } public bool ContainsProperty(T item) { return items.Contains(item); } @@ -26,12 +39,9 @@ public IEnumerator<T> GetEnumerator() { return items.GetEnumerator(); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return items.GetEnumerator(); } } - public class PropertyDictionary : PropertyDictionary<string, object> + public class PropertyDictionary : PropertyDictionary<string, object>, IPropertyDictionary { - public PropertyDictionary() : base() - { - ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); - } + public PropertyDictionary() : base() { } public PropertyDictionary(IPropertyDictionary dictionary) : base(dictionary) { } public PropertyDictionary(IEqualityComparer<string> comparer) : base(comparer) { } public PropertyDictionary(int capacity) :base(capacity) { } @@ -119,25 +129,36 @@ public bool RemoveProperty(TKey key) { return properties.Remove(key); } public bool TryGetPropertyValue(TKey key, out TValue value) { return properties.TryGetValue(key, out value); } public int PropertyCount { get { return properties.Count; } } - public bool IsReadOnly { get { return (properties as ICollection<TKey>).IsReadOnly; } } - public void AddProperty(PropertyValuePair<TKey, TValue> item) { AddProperty(item.Name, item.Value); } + public bool IsReadOnly + { + get + { + IDictionary<TKey, TValue> collection = (properties as IDictionary<TKey, TValue>); + if (collection == null) + { + throw new InvalidCastException(string.Format("Unable to cast: '{0}' to '{1}'", properties.GetType().Name, typeof(IDictionary<TKey, TValue>).Name)); + } + return collection.IsReadOnly; + } + } + public void AddProperty(IPropertyValuePair<TKey, TValue> item) { AddProperty(item.Name, item.Value); } public void ClearProperties() { properties.Clear(); } - public bool ContainsProperty(PropertyValuePair<TKey, TValue> item) { return ContainsProperty(item.Name); } - public void CopyPropertiesTo(PropertyValuePair<TKey, TValue>[] array, int arrayIndex) + public bool ContainsProperty(IPropertyValuePair<TKey, TValue> item) { return ContainsProperty(item.Name); } + public void CopyPropertiesTo(IPropertyValuePair<TKey, TValue>[] array, int arrayIndex) { - var list = properties.ToList().Cast<PropertyValuePair<TKey, TValue>>().ToList(); + var list = properties.ToList().Cast<IPropertyValuePair<TKey, TValue>>().ToList(); list.CopyTo(array, arrayIndex); } - public bool RemoveProperty(PropertyValuePair<TKey, TValue> item) { return RemoveProperty(item.Name); } - IEnumerator<PropertyValuePair<TKey, TValue>> IEnumerable<PropertyValuePair<TKey, TValue>>.GetEnumerator() { return new PropertyDictionaryEnumerator(this, 2); } + public bool RemoveProperty(IPropertyValuePair<TKey, TValue> item) { return RemoveProperty(item.Name); } + IEnumerator<IPropertyValuePair<TKey, TValue>> IEnumerable<IPropertyValuePair<TKey, TValue>>.GetEnumerator() { return new PropertyDictionaryEnumerator(this, 2); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return properties.GetEnumerator(); } #region enumerator support - public class PropertyDictionaryEnumerator: IEnumerator<PropertyValuePair<TKey,TValue>>, IDisposable + public class PropertyDictionaryEnumerator : IEnumerator<IPropertyValuePair<TKey, TValue>>, IDisposable { private PropertyDictionary<TKey, TValue> dictionary; private int index; - private PropertyValuePair<TKey, TValue> current; + private IPropertyValuePair<TKey, TValue> current; private int getEnumeratorRetType; internal const int DictEntry = 1; internal const int KeyValuePair = 2; @@ -151,7 +172,7 @@ this.current = new PropertyValuePair<TKey, TValue>(); } - public PropertyValuePair<TKey, TValue> Current + public IPropertyValuePair<TKey, TValue> Current { get { return this.current; } } @@ -186,7 +207,7 @@ { if (this.dictionary.entries[this.index].hashCode >= 0) { - this.current = new KeyValuePair<TKey, TValue>(this.dictionary.entries[this.index].name, this.dictionary.entries[this.index].value); + this.current =(IPropertyValuePair<TKey,TValue>)(PropertyValuePair<TKey,TValue>)new KeyValuePair<TKey, TValue>(this.dictionary.entries[this.index].name, this.dictionary.entries[this.index].value); this.index++; return true; } @@ -203,7 +224,7 @@ ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_EnumFailedVersion); } this.index = 0; - this.current = new KeyValuePair<TKey, TValue>(); + this.current = (IPropertyValuePair<TKey, TValue>)(PropertyValuePair<TKey, TValue>)new KeyValuePair<TKey, TValue>(); } } #endregion
ViewVC Help | |
Powered by ViewVC 1.1.22 |