#region Apache License // // Licensed to the Apache Software Foundation (ASF) under one or more // contributor license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright ownership. // The ASF licenses this file to you under the Apache License, Version 2.0 // (the "License"); you may not use this file except in compliance with // the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #endregion using System; using System.Collections; namespace log4net.Util { /// /// An always empty . /// /// /// /// A singleton implementation of the over a collection /// that is empty and not modifiable. /// /// /// Nicko Cadell /// Gert Driesen public sealed class NullDictionaryEnumerator : IDictionaryEnumerator { #region Private Instance Constructors /// /// Initializes a new instance of the class. /// /// /// /// Uses a private access modifier to enforce the singleton pattern. /// /// private NullDictionaryEnumerator() { } #endregion Private Instance Constructors #region Public Static Properties /// /// Gets the singleton instance of the . /// /// The singleton instance of the . /// /// /// Gets the singleton instance of the . /// /// public static NullDictionaryEnumerator Instance { get { return s_instance; } } #endregion Public Static Properties #region Implementation of IEnumerator /// /// Gets the current object from the enumerator. /// /// /// Throws an because the /// never has a current value. /// /// /// /// As the enumerator is over an empty collection its /// value cannot be moved over a valid position, therefore /// will throw an . /// /// /// The collection is empty and /// cannot be positioned over a valid location. public object Current { get { throw new InvalidOperationException(); } } /// /// Test if the enumerator can advance, if so advance. /// /// false as the cannot advance. /// /// /// As the enumerator is over an empty collection its /// value cannot be moved over a valid position, therefore /// will always return false. /// /// public bool MoveNext() { return false; } /// /// Resets the enumerator back to the start. /// /// /// /// As the enumerator is over an empty collection does nothing. /// /// public void Reset() { } #endregion Implementation of IEnumerator #region Implementation of IDictionaryEnumerator /// /// Gets the current key from the enumerator. /// /// /// Throws an exception because the /// never has a current value. /// /// /// /// As the enumerator is over an empty collection its /// value cannot be moved over a valid position, therefore /// will throw an . /// /// /// The collection is empty and /// cannot be positioned over a valid location. public object Key { get { throw new InvalidOperationException(); } } /// /// Gets the current value from the enumerator. /// /// The current value from the enumerator. /// /// Throws an because the /// never has a current value. /// /// /// /// As the enumerator is over an empty collection its /// value cannot be moved over a valid position, therefore /// will throw an . /// /// /// The collection is empty and /// cannot be positioned over a valid location. public object Value { get { throw new InvalidOperationException(); } } /// /// Gets the current entry from the enumerator. /// /// /// Throws an because the /// never has a current entry. /// /// /// /// As the enumerator is over an empty collection its /// value cannot be moved over a valid position, therefore /// will throw an . /// /// /// The collection is empty and /// cannot be positioned over a valid location. public DictionaryEntry Entry { get { throw new InvalidOperationException(); } } #endregion Implementation of IDictionaryEnumerator #region Private Static Fields /// /// The singleton instance of the . /// private readonly static NullDictionaryEnumerator s_instance = new NullDictionaryEnumerator(); #endregion Private Static Fields } }