Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Collections / ListDictionaryInternal.cs / 1305376 / ListDictionaryInternal.cs
using System.Diagnostics.Contracts; // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: ListDictionaryInternal ** **[....] ** ** ** Purpose: List for exceptions. ** ** ===========================================================*/ namespace System.Collections { /// This is a simple implementation of IDictionary using a singly linked list. This /// will be smaller and faster than a Hashtable if the number of elements is 10 or less. /// This should not be used if performance is important for large numbers of elements. [Serializable] internal class ListDictionaryInternal: IDictionary { DictionaryNode head; int version; int count; [NonSerialized] private Object _syncRoot; public ListDictionaryInternal() { } public Object this[Object key] { get { if (key == null) { throw new ArgumentNullException("key", Environment.GetResourceString("ArgumentNull_Key")); } Contract.EndContractBlock(); DictionaryNode node = head; while (node != null) { if ( node.key.Equals(key) ) { return node.value; } node = node.next; } return null; } set { if (key == null) { throw new ArgumentNullException("key", Environment.GetResourceString("ArgumentNull_Key")); } Contract.EndContractBlock(); #if FEATURE_SERIALIZATION 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"); #endif version++; DictionaryNode last = null; DictionaryNode node; for (node = head; node != null; node = node.next) { if( node.key.Equals(key) ) { break; } last = node; } if (node != null) { // Found it node.value = value; return; } // Not found, so add a new one DictionaryNode newNode = new DictionaryNode(); newNode.key = key; newNode.value = value; if (last != null) { last.next = newNode; } else { head = newNode; } count++; } } public int Count { get { return count; } } public ICollection Keys { get { return new NodeKeyValueCollection(this, true); } } public bool IsReadOnly { get { return false; } } public bool IsFixedSize { get { return false; } } public bool IsSynchronized { get { return false; } } public Object SyncRoot { get { if( _syncRoot == null) { System.Threading.Interlocked.CompareExchange
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PaintEvent.cs
- ClientType.cs
- MetadataSection.cs
- ValidationEventArgs.cs
- ConfigXmlAttribute.cs
- ArraySubsetEnumerator.cs
- EntityDesignerDataSourceView.cs
- Native.cs
- SqlGatherConsumedAliases.cs
- TrustManager.cs
- EncodingTable.cs
- KnownBoxes.cs
- GridEntry.cs
- DataGridViewCellCollection.cs
- CaseExpr.cs
- EntityDataSourceSelectingEventArgs.cs
- CopyOfAction.cs
- TrackingValidationObjectDictionary.cs
- StopStoryboard.cs
- ToolStripManager.cs
- OrthographicCamera.cs
- WaitHandle.cs
- GlobalizationSection.cs
- SqlNode.cs
- CharEntityEncoderFallback.cs
- MemberDescriptor.cs
- EqualityComparer.cs
- Clock.cs
- UInt64Converter.cs
- Attributes.cs
- CapabilitiesSection.cs
- MenuCommand.cs
- TdsParserSessionPool.cs
- MachineSettingsSection.cs
- TextRangeEditLists.cs
- EntitySqlQueryCacheEntry.cs
- SoapParser.cs
- LicenseException.cs
- PriorityRange.cs
- ReadOnlyObservableCollection.cs
- OdbcInfoMessageEvent.cs
- NetworkInformationException.cs
- LongTypeConverter.cs
- Visual3D.cs
- ReliableMessagingVersion.cs
- DefaultPropertyAttribute.cs
- AssemblyHash.cs
- SqlExpander.cs
- StyleCollection.cs
- RunWorkerCompletedEventArgs.cs
- QilGeneratorEnv.cs
- ListBoxChrome.cs
- DesignerEditorPartChrome.cs
- CryptoConfig.cs
- HttpDebugHandler.cs
- ScrollEvent.cs
- SqlGenericUtil.cs
- XmlArrayItemAttribute.cs
- Speller.cs
- XPathDocumentIterator.cs
- WindowsAltTab.cs
- CellRelation.cs
- SchemaInfo.cs
- Point4DValueSerializer.cs
- SkinBuilder.cs
- WebPartDisplayMode.cs
- DBSchemaRow.cs
- EventLogPermissionAttribute.cs
- ComboBox.cs
- EmptyCollection.cs
- EncoderExceptionFallback.cs
- _Connection.cs
- PagesSection.cs
- GridEntryCollection.cs
- GeneralTransformCollection.cs
- AdjustableArrowCap.cs
- IERequestCache.cs
- wpf-etw.cs
- NamespaceInfo.cs
- StyleTypedPropertyAttribute.cs
- Currency.cs
- BuilderElements.cs
- CellRelation.cs
- XmlTextReader.cs
- RelatedView.cs
- HostProtectionPermission.cs
- PageThemeBuildProvider.cs
- Currency.cs
- ColorAnimation.cs
- TypeDescriptionProvider.cs
- TextBoxBase.cs
- ApplicationBuildProvider.cs
- MetadataArtifactLoaderCompositeFile.cs
- PreservationFileReader.cs
- ControlFilterExpression.cs
- Tuple.cs
- ResXBuildProvider.cs
- LoginUtil.cs
- OutputCacheSettingsSection.cs
- ValidatorCollection.cs