//
// System.Collections.ObjectModel.ReadOnlyCollection
//
-// Author:
+// Authors:
// Zoltan Varga (vargaz@gmail.com)
// David Waite (mass@akuma.org)
+// Marek Safar (marek.safar@gmail.com)
//
// (C) 2005 Novell, Inc.
// (C) 2005 David Waite
//
// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
// Copyright (C) 2005 David Waite
+// Copyright (C) 2011 Xamarin, Inc (http://www.xamarin.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-#if NET_2_0
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
+using System.Diagnostics;
namespace System.Collections.ObjectModel
{
[ComVisible (false)]
[Serializable]
- public class ReadOnlyCollection <T> : IList <T>, ICollection <T>, IEnumerable <T>, IList, ICollection, IEnumerable
+ [DebuggerDisplay ("Count={Count}")]
+ [DebuggerTypeProxy (typeof (CollectionDebuggerView<>))]
+ public class ReadOnlyCollection<T> : IList<T>, IList
+#if NET_4_5
+ , IReadOnlyList<T>
+#endif
{
IList <T> list;
- object syncRoot;
public ReadOnlyCollection (IList <T> list)
{
if (list == null)
throw new ArgumentNullException ("list");
this.list = list;
- ICollection c = list as ICollection;
- syncRoot = (c != null) ? c.SyncRoot : new object ();
}
- public void Add (T item)
+ void ICollection<T>.Add (T item)
{
throw new NotSupportedException ();
}
- public void Clear ()
+ void ICollection<T>.Clear ()
{
throw new NotSupportedException ();
}
- public bool Contains (T item)
+ public bool Contains (T value)
{
- return list.Contains (item);
+ return list.Contains (value);
}
public void CopyTo (T [] array, int index)
return list.GetEnumerator ();
}
- public int IndexOf (T item)
+ public int IndexOf (T value)
{
- return list.IndexOf (item);
+ return list.IndexOf (value);
}
- public void Insert (int index, T item)
+ void IList<T>.Insert (int index, T item)
{
throw new NotSupportedException ();
}
- public bool Remove (T item)
+ bool ICollection<T>.Remove (T item)
{
throw new NotSupportedException ();
}
- public void RemoveAt (int index)
+ void IList<T>.RemoveAt (int index)
{
throw new NotSupportedException ();
}
get { return list.Count; }
}
+ protected IList<T> Items {
+ get { return list; }
+ }
+
public T this [int index] {
get { return list [index]; }
+ }
+
+ T IList<T>.this [int index] {
+ get { return this [index]; }
set { throw new NotSupportedException (); }
}
- public bool IsReadOnly {
+ bool ICollection<T>.IsReadOnly {
get { return true; }
}
#region Not generic interface implementations
- void ICollection.CopyTo (Array array, int arrayIndex)
+ void ICollection.CopyTo (Array array, int index)
{
- T [] target = array as T [];
- if (target == null)
- throw new ArgumentException ("array");
- list.CopyTo (target, arrayIndex);
+ ((ICollection)list).CopyTo (array, index);
}
IEnumerator IEnumerable.GetEnumerator ()
return ((IEnumerable) list).GetEnumerator ();
}
- int IList.Add (object item)
+ int IList.Add (object value)
{
throw new NotSupportedException ();
}
- bool IList.Contains (object item)
+ void IList.Clear ()
{
- if (Collection <T>.IsValidItem (item))
- return list.Contains ((T) item);
+ throw new NotSupportedException ();
+ }
+
+ bool IList.Contains (object value)
+ {
+ if (CollectionHelpers.IsValidItem<T> (value))
+ return list.Contains ((T) value);
return false;
}
- int IList.IndexOf (object item)
+ int IList.IndexOf (object value)
{
- if (Collection <T>.IsValidItem (item))
- return list.IndexOf ((T) item);
+ if (CollectionHelpers.IsValidItem<T> (value))
+ return list.IndexOf ((T) value);
return -1;
}
- void IList.Insert (int index, object item)
+ void IList.Insert (int index, object value)
{
throw new NotSupportedException ();
}
- void IList.Remove (object item)
+ void IList.Remove (object value)
{
throw new NotSupportedException ();
}
+ void IList.RemoveAt (int index)
+ {
+ throw new NotSupportedException ();
+ }
+
bool ICollection.IsSynchronized {
- get { return Collection <T>.IsSynchronized (list); }
+ get { return false; }
}
object ICollection.SyncRoot {
- get { return syncRoot; }
+ get { return this; }
}
bool IList.IsFixedSize {
- get { return Collection <T>.IsFixedSize (list); }
+ get { return true; }
}
bool IList.IsReadOnly {
#endregion
}
}
-#endif