summaryrefslogtreecommitdiff
path: root/src/mscorlib/src/System/Collections/EmptyReadOnlyDictionaryInternal.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/mscorlib/src/System/Collections/EmptyReadOnlyDictionaryInternal.cs')
-rw-r--r--src/mscorlib/src/System/Collections/EmptyReadOnlyDictionaryInternal.cs194
1 files changed, 194 insertions, 0 deletions
diff --git a/src/mscorlib/src/System/Collections/EmptyReadOnlyDictionaryInternal.cs b/src/mscorlib/src/System/Collections/EmptyReadOnlyDictionaryInternal.cs
new file mode 100644
index 0000000000..6e28493ef8
--- /dev/null
+++ b/src/mscorlib/src/System/Collections/EmptyReadOnlyDictionaryInternal.cs
@@ -0,0 +1,194 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+/*============================================================
+**
+**
+**
+**
+**
+** Purpose: List for exceptions.
+**
+**
+===========================================================*/
+
+using System.Diagnostics.Contracts;
+
+namespace System.Collections {
+ /// This is a simple implementation of IDictionary that is empty and readonly.
+ [Serializable]
+ internal sealed class EmptyReadOnlyDictionaryInternal: IDictionary {
+
+ // Note that this class must be agile with respect to AppDomains. See its usage in
+ // System.Exception to understand why this is the case.
+
+ public EmptyReadOnlyDictionaryInternal() {
+ }
+
+ // IEnumerable members
+
+ IEnumerator IEnumerable.GetEnumerator() {
+ return new NodeEnumerator();
+ }
+
+ // ICollection members
+
+ public void CopyTo(Array array, int index) {
+ if (array==null)
+ throw new ArgumentNullException("array");
+
+ if (array.Rank != 1)
+ throw new ArgumentException(Environment.GetResourceString("Arg_RankMultiDimNotSupported"));
+
+ if (index < 0)
+ throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
+
+ if ( array.Length - index < this.Count )
+ throw new ArgumentException( Environment.GetResourceString("ArgumentOutOfRange_Index"), "index");
+ Contract.EndContractBlock();
+
+ // the actual copy is a NOP
+ }
+
+ public int Count {
+ get {
+ return 0;
+ }
+ }
+
+ public Object SyncRoot {
+ get {
+ return this;
+ }
+ }
+
+ public bool IsSynchronized {
+ get {
+ return false;
+ }
+ }
+
+ // IDictionary members
+
+ public Object this[Object key] {
+ get {
+ if (key == null) {
+ throw new ArgumentNullException("key", Environment.GetResourceString("ArgumentNull_Key"));
+ }
+ Contract.EndContractBlock();
+ return null;
+ }
+ set {
+ if (key == null) {
+ throw new ArgumentNullException("key", Environment.GetResourceString("ArgumentNull_Key"));
+ }
+
+ if (!key.GetType().IsSerializable)
+ throw new ArgumentException(Environment.GetResourceString("Argument_NotSerializable"), "key");
+
+ if( (value != null) && (!value.GetType().IsSerializable ) )
+ throw new ArgumentException(Environment.GetResourceString("Argument_NotSerializable"), "value");
+ Contract.EndContractBlock();
+
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ReadOnly"));
+ }
+ }
+
+ public ICollection Keys {
+ get {
+ return EmptyArray<Object>.Value;
+ }
+ }
+
+ public ICollection Values {
+ get {
+ return EmptyArray<Object>.Value;
+ }
+ }
+
+ public bool Contains(Object key) {
+ return false;
+ }
+
+ public void Add(Object key, Object value) {
+ if (key == null) {
+ throw new ArgumentNullException("key", Environment.GetResourceString("ArgumentNull_Key"));
+ }
+
+ if (!key.GetType().IsSerializable)
+ throw new ArgumentException(Environment.GetResourceString("Argument_NotSerializable"), "key" );
+
+ if( (value != null) && (!value.GetType().IsSerializable) )
+ throw new ArgumentException(Environment.GetResourceString("Argument_NotSerializable"), "value");
+ Contract.EndContractBlock();
+
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ReadOnly"));
+ }
+
+ public void Clear() {
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ReadOnly"));
+ }
+
+ public bool IsReadOnly {
+ get {
+ return true;
+ }
+ }
+
+ public bool IsFixedSize {
+ get {
+ return true;
+ }
+ }
+
+ public IDictionaryEnumerator GetEnumerator() {
+ return new NodeEnumerator();
+ }
+
+ public void Remove(Object key) {
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ReadOnly"));
+ }
+
+ private sealed class NodeEnumerator : IDictionaryEnumerator {
+
+ public NodeEnumerator() {
+ }
+
+ // IEnumerator members
+
+ public bool MoveNext() {
+ return false;
+ }
+
+ public Object Current {
+ get {
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen"));
+ }
+ }
+
+ public void Reset() {
+ }
+
+ // IDictionaryEnumerator members
+
+ public Object Key {
+ get {
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen"));
+ }
+ }
+
+ public Object Value {
+ get {
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen"));
+ }
+ }
+
+ public DictionaryEntry Entry {
+ get {
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen"));
+ }
+ }
+ }
+ }
+}