Code:
/ DotNET / DotNET / 8.0 / untmp / Orcas / RTM / ndp / fx / src / xsp / System / Web / Extensions / Util / OrderedDictionary.cs / 1 / OrderedDictionary.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Util { using System; using System.Collections; using System.Collections.Generic; internal class OrderedDictionary: IDictionary { private Dictionary _dictionary; private List _keys; private List _values; // Cannot easily support ctor that takes IEqualityComparer, since List doesn't have an easy // way to use the IEqualityComparer. public OrderedDictionary() : this(0) { } public OrderedDictionary(int capacity) { _dictionary = new Dictionary (capacity); _keys = new List (capacity); _values = new List (capacity); } public int Count { get { return _dictionary.Count; } } public ICollection Keys { get { return _keys.AsReadOnly(); } } public TValue this[TKey key] { get { return _dictionary[key]; } set { // If key has already been added, we must first remove it from the lists so it is not // in the lists multiple times. RemoveFromLists(key); _dictionary[key] = value; _keys.Add(key); _values.Add(value); } } public ICollection Values { get { return _values.AsReadOnly(); } } public void Add(TKey key, TValue value) { // Dictionary.Add() will throw if it already contains key _dictionary.Add(key, value); _keys.Add(key); _values.Add(value); } public void Clear() { _dictionary.Clear(); _keys.Clear(); _values.Clear(); } public bool ContainsKey(TKey key) { return _dictionary.ContainsKey(key); } public bool ContainsValue(TValue value) { return _dictionary.ContainsValue(value); } public IEnumerator > GetEnumerator() { int i = 0; // Must use foreach instead of a for loop, since we want the underlying List enumerator to // throw an exception if the list is modified during enumeration. foreach (TKey key in _keys) { yield return new KeyValuePair (key, _values[i]); i++; } } private void RemoveFromLists(TKey key) { int index = _keys.IndexOf(key); if (index != -1) { _keys.RemoveAt(index); _values.RemoveAt(index); } } public bool Remove(TKey key) { RemoveFromLists(key); return _dictionary.Remove(key); } public bool TryGetValue(TKey key, out TValue value) { return _dictionary.TryGetValue(key, out value); } #region ICollection > Members bool ICollection >.IsReadOnly { get { return ((ICollection >)_dictionary).IsReadOnly; } } void ICollection >.Add(KeyValuePair item) { Add(item.Key, item.Value); } bool ICollection >.Contains(KeyValuePair item) { return ((ICollection >)_dictionary).Contains(item); } void ICollection >.CopyTo(KeyValuePair [] array, int arrayIndex) { ((ICollection >)_dictionary).CopyTo(array, arrayIndex); } bool ICollection >.Remove(KeyValuePair item) { bool removed = ((ICollection >)_dictionary).Remove(item); // Only remove from lists if it was removed from the dictionary, since the dictionary may contain // the key but not the value. if (removed) { RemoveFromLists(item.Key); } return removed; } #endregion #region IEnumerable Members IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DesignerDataTable.cs
- LocalizationComments.cs
- DesignerTransactionCloseEvent.cs
- DesignConnection.cs
- validationstate.cs
- ExpandedProjectionNode.cs
- AlphabetConverter.cs
- SimplePropertyEntry.cs
- DbConnectionPoolGroupProviderInfo.cs
- DocumentDesigner.cs
- AlignmentXValidation.cs
- SqlWebEventProvider.cs
- WindowsAltTab.cs
- ContextDataSourceView.cs
- SimpleLine.cs
- HwndMouseInputProvider.cs
- FeatureSupport.cs
- SmiContext.cs
- Validator.cs
- ValueOfAction.cs
- HasCopySemanticsAttribute.cs
- OleCmdHelper.cs
- SystemWebSectionGroup.cs
- InputScopeAttribute.cs
- FtpWebRequest.cs
- IdentityNotMappedException.cs
- DataGridViewToolTip.cs
- TypeConverter.cs
- TransactedReceiveData.cs
- ChannelCredentials.cs
- SchemaImporterExtensionElement.cs
- SpellerHighlightLayer.cs
- WebReferencesBuildProvider.cs
- Converter.cs
- XmlnsCompatibleWithAttribute.cs
- StylusShape.cs
- SchemaNamespaceManager.cs
- RsaKeyIdentifierClause.cs
- Win32KeyboardDevice.cs
- FileInfo.cs
- HostedBindingBehavior.cs
- SkinBuilder.cs
- FormsAuthenticationConfiguration.cs
- MarkupCompilePass1.cs
- DbMetaDataCollectionNames.cs
- CustomErrorCollection.cs
- NetCodeGroup.cs
- ComponentConverter.cs
- XmlSchemaInfo.cs
- BackgroundFormatInfo.cs
- VerificationException.cs
- HttpProfileGroupBase.cs
- StackOverflowException.cs
- CodeFieldReferenceExpression.cs
- DataObjectEventArgs.cs
- Rule.cs
- PersonalizationProviderHelper.cs
- SecurityContextTokenValidationException.cs
- AnnotationService.cs
- Color.cs
- FunctionMappingTranslator.cs
- HostSecurityManager.cs
- OperationCanceledException.cs
- PermissionSetEnumerator.cs
- SqlRewriteScalarSubqueries.cs
- CodeDomConfigurationHandler.cs
- PbrsForward.cs
- IEnumerable.cs
- BamlRecordReader.cs
- TrackingMemoryStream.cs
- DirectoryGroupQuery.cs
- Int32AnimationUsingKeyFrames.cs
- LostFocusEventManager.cs
- WindowsAuthenticationModule.cs
- ScriptingSectionGroup.cs
- ReflectionPermission.cs
- KnownTypesProvider.cs
- MatcherBuilder.cs
- ControlAdapter.cs
- ServiceDescriptionSerializer.cs
- NavigationEventArgs.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- GACMembershipCondition.cs
- xmlglyphRunInfo.cs
- DynamicDataResources.Designer.cs
- ServicesUtilities.cs
- ActiveXHost.cs
- ValueUnavailableException.cs
- ValidationErrorInfo.cs
- ImageIndexEditor.cs
- WindowsEditBoxRange.cs
- BuildResult.cs
- TextRangeSerialization.cs
- NativeBuffer.cs
- CodeExpressionCollection.cs
- DecimalFormatter.cs
- WorkflowControlClient.cs
- GroupBox.cs
- SafeHandle.cs
- HMACSHA1.cs