The Labs \ Source Viewer \ SSCLI \ System.Collections \ NodeEnumerator

  1. // ==++==
  2. //
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. //
  14. // ==--==
  15. /*============================================================
  16. **
  17. ** Class:  ListDictionaryInternal
  18. **
  19. **
  20. ** Purpose: List for exceptions.
  21. **
  22. **
  23. ===========================================================*/
  24. namespace System.Collections
  25. {
  26.     /// This is a simple implementation of IDictionary that is empty and readonly.
  27.     [Serializable()]
  28.     internal sealed class EmptyReadOnlyDictionaryInternal : IDictionary
  29.     {
  30.        
  31.         // Note that this class must be agile with respect to AppDomains. See its usage in
  32.         // System.Exception to understand why this is the case.
  33.        
  34.         public EmptyReadOnlyDictionaryInternal()
  35.         {
  36.         }
  37.        
  38.         // IEnumerable members
  39.        
  40.         IEnumerator IEnumerable.GetEnumerator()
  41.         {
  42.             return new NodeEnumerator();
  43.         }
  44.        
  45.         // ICollection members
  46.        
  47.         public void CopyTo(Array array, int index)
  48.         {
  49.             if (array == null)
  50.                 throw new ArgumentNullException("array");
  51.            
  52.             if (array.Rank != 1)
  53.                 throw new ArgumentException(Environment.GetResourceString("Arg_RankMultiDimNotSupported"));
  54.            
  55.             if (index < 0)
  56.                 throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
  57.            
  58.             if (array.Length - index < this.Count)
  59.                 throw new ArgumentException(Environment.GetResourceString("ArgumentOutOfRange_Index"), "index");
  60.            
  61.             // the actual copy is a NOP
  62.         }
  63.        
  64.         public int Count {
  65.             get { return 0; }
  66.         }
  67.        
  68.         public object SyncRoot {
  69.             get { return this; }
  70.         }
  71.        
  72.         public bool IsSynchronized {
  73.             get { return false; }
  74.         }
  75.        
  76.         // IDictionary members
  77.        
  78.         public object this[object key]
  79.         {
  80.             get {
  81.                 if (key == null) {
  82.                     throw new ArgumentNullException("key", Environment.GetResourceString("ArgumentNull_Key"));
  83.                 }
  84.                 return null;
  85.             }
  86.             set {
  87.                 if (key == null) {
  88.                     throw new ArgumentNullException("key", Environment.GetResourceString("ArgumentNull_Key"));
  89.                 }
  90.                
  91.                 if (!key.GetType().IsSerializable)
  92.                     throw new ArgumentException(Environment.GetResourceString("Argument_NotSerializable"), "key");
  93.                
  94.                 if ((value != null) && (!value.GetType().IsSerializable))
  95.                     throw new ArgumentException(Environment.GetResourceString("Argument_NotSerializable"), "value");
  96.                
  97.                 throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ReadOnly"));
  98.             }
  99.         }
  100.        
  101.         public ICollection Keys {
  102.             get { return new object[0]; }
  103.         }
  104.        
  105.         public ICollection Values {
  106.             get { return new object[0]; }
  107.         }
  108.        
  109.         public bool Contains(object key)
  110.         {
  111.             return false;
  112.         }
  113.        
  114.         public void Add(object key, object value)
  115.         {
  116.             if (key == null) {
  117.                 throw new ArgumentNullException("key", Environment.GetResourceString("ArgumentNull_Key"));
  118.             }
  119.            
  120.             if (!key.GetType().IsSerializable)
  121.                 throw new ArgumentException(Environment.GetResourceString("Argument_NotSerializable"), "key");
  122.            
  123.             if ((value != null) && (!value.GetType().IsSerializable))
  124.                 throw new ArgumentException(Environment.GetResourceString("Argument_NotSerializable"), "value");
  125.            
  126.             throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ReadOnly"));
  127.         }
  128.        
  129.         public void Clear()
  130.         {
  131.             throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ReadOnly"));
  132.         }
  133.        
  134.         public bool IsReadOnly {
  135.             get { return true; }
  136.         }
  137.        
  138.         public bool IsFixedSize {
  139.             get { return true; }
  140.         }
  141.        
  142.         public IDictionaryEnumerator GetEnumerator()
  143.         {
  144.             return new NodeEnumerator();
  145.         }
  146.        
  147.         public void Remove(object key)
  148.         {
  149.             throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ReadOnly"));
  150.         }
  151.        
  152.         private sealed class NodeEnumerator : IDictionaryEnumerator
  153.         {
  154.            
  155.             public NodeEnumerator()
  156.             {
  157.             }
  158.            
  159.             // IEnumerator members
  160.            
  161.             public bool MoveNext()
  162.             {
  163.                 return false;
  164.             }
  165.            
  166.             public object Current {
  167.                 get {
  168.                     throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen"));
  169.                 }
  170.             }
  171.            
  172.             public void Reset()
  173.             {
  174.             }
  175.            
  176.             // IDictionaryEnumerator members
  177.            
  178.             public object Key {
  179.                 get {
  180.                     throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen"));
  181.                 }
  182.             }
  183.            
  184.             public object Value {
  185.                 get {
  186.                     throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen"));
  187.                 }
  188.             }
  189.            
  190.             public DictionaryEntry Entry {
  191.                 get {
  192.                     throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumOpCantHappen"));
  193.                 }
  194.             }
  195.         }
  196.     }
  197. }

Developer Fusion