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
- StatusBar.cs
- DataViewSettingCollection.cs
- DataListItem.cs
- HttpListenerRequest.cs
- ToolboxComponentsCreatingEventArgs.cs
- SubpageParaClient.cs
- ConsoleCancelEventArgs.cs
- _NegotiateClient.cs
- RuntimeArgumentHandle.cs
- DelayDesigner.cs
- HtmlAnchor.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- Signature.cs
- WebBrowserHelper.cs
- ObjectDataSourceDisposingEventArgs.cs
- PropertyChangingEventArgs.cs
- CreateParams.cs
- CompiledQuery.cs
- Byte.cs
- TimeStampChecker.cs
- DateTimeHelper.cs
- WebPartTransformerCollection.cs
- SchemaInfo.cs
- GridViewColumn.cs
- WindowPatternIdentifiers.cs
- KnownBoxes.cs
- HttpProcessUtility.cs
- TagElement.cs
- WizardForm.cs
- Command.cs
- InstanceDataCollection.cs
- IndexedGlyphRun.cs
- Page.cs
- SchemaContext.cs
- XmlWellformedWriter.cs
- Roles.cs
- GroupItem.cs
- XMLSyntaxException.cs
- LiteralControl.cs
- brushes.cs
- DataViewManagerListItemTypeDescriptor.cs
- StorageInfo.cs
- BindValidationContext.cs
- DataObjectCopyingEventArgs.cs
- RuntimeCompatibilityAttribute.cs
- TemplateLookupAction.cs
- SQLCharsStorage.cs
- MemberDomainMap.cs
- HighContrastHelper.cs
- DocumentCollection.cs
- ActivityCodeDomReferenceService.cs
- AbsoluteQuery.cs
- Bezier.cs
- TcpTransportElement.cs
- LinearKeyFrames.cs
- FontStretches.cs
- errorpatternmatcher.cs
- ConcurrentStack.cs
- ObjectQueryExecutionPlan.cs
- SynchronizedKeyedCollection.cs
- StrongTypingException.cs
- ResourceAttributes.cs
- PeerPresenceInfo.cs
- DropDownHolder.cs
- EdmPropertyAttribute.cs
- QueryExpr.cs
- LogicalTreeHelper.cs
- GridViewRowPresenter.cs
- DataGridViewRowsAddedEventArgs.cs
- ScrollViewerAutomationPeer.cs
- DurationConverter.cs
- ToolboxComponentsCreatedEventArgs.cs
- CommandEventArgs.cs
- PrintEvent.cs
- ClosableStream.cs
- File.cs
- CachedPathData.cs
- SchemaImporter.cs
- WebPartVerb.cs
- CodePrimitiveExpression.cs
- TextProviderWrapper.cs
- CodeGenerator.cs
- AttributeQuery.cs
- DbConnectionInternal.cs
- Line.cs
- CalendarAutoFormat.cs
- SafeRightsManagementQueryHandle.cs
- ListBox.cs
- TemplatePagerField.cs
- ClientScriptItem.cs
- recordstate.cs
- ManagementPath.cs
- RemoteDebugger.cs
- ToolStripOverflow.cs
- recordstatescratchpad.cs
- SmtpNetworkElement.cs
- Container.cs
- BuildDependencySet.cs
- CompoundFileStorageReference.cs
- Annotation.cs