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
- ContextStack.cs
- CharacterShapingProperties.cs
- SplashScreenNativeMethods.cs
- ColumnHeaderConverter.cs
- EventArgs.cs
- MiniCustomAttributeInfo.cs
- Nullable.cs
- ProxyElement.cs
- DependencyObjectCodeDomSerializer.cs
- SHA384CryptoServiceProvider.cs
- TextRenderer.cs
- ExceptionList.cs
- BoolExpression.cs
- StylusCaptureWithinProperty.cs
- DataGridViewElement.cs
- ReadContentAsBinaryHelper.cs
- FamilyMapCollection.cs
- UpdateTranslator.cs
- MatrixTransform.cs
- SqlCacheDependencySection.cs
- CompensableActivity.cs
- CompressEmulationStream.cs
- CommonGetThemePartSize.cs
- XamlClipboardData.cs
- ToolStripScrollButton.cs
- Transform.cs
- FixedTextContainer.cs
- NumericPagerField.cs
- ComplexObject.cs
- ApplicationCommands.cs
- DecimalMinMaxAggregationOperator.cs
- InstanceStoreQueryResult.cs
- RepeatBehavior.cs
- ApplicationCommands.cs
- PositiveTimeSpanValidator.cs
- SplitterEvent.cs
- ConvertBinder.cs
- TextRangeAdaptor.cs
- BufferAllocator.cs
- ValidationErrorCollection.cs
- UrlPath.cs
- StructuredTypeInfo.cs
- ComponentConverter.cs
- InlineCollection.cs
- SystemEvents.cs
- RtfToXamlLexer.cs
- AutomationPatternInfo.cs
- AuthenticationModuleElement.cs
- ListView.cs
- TextAnchor.cs
- FixUp.cs
- SpeechSeg.cs
- ClientBuildManager.cs
- DrawingAttributes.cs
- SpellerHighlightLayer.cs
- XmlILIndex.cs
- AxHost.cs
- BindingManagerDataErrorEventArgs.cs
- SafeUserTokenHandle.cs
- ArgumentOutOfRangeException.cs
- TypeResolver.cs
- LoginStatusDesigner.cs
- JoinQueryOperator.cs
- Trace.cs
- UriTemplateLiteralQueryValue.cs
- ByteStreamMessageEncoder.cs
- VisualTreeUtils.cs
- SqlCommandBuilder.cs
- TypeConverterAttribute.cs
- WmlSelectionListAdapter.cs
- TrustManager.cs
- ArithmeticException.cs
- ObjectListDesigner.cs
- ViewStateModeByIdAttribute.cs
- MemoryPressure.cs
- CompilationLock.cs
- SymmetricKeyWrap.cs
- LogExtent.cs
- DrawToolTipEventArgs.cs
- WorkflowMarkupSerializerMapping.cs
- MdiWindowListStrip.cs
- ECDiffieHellmanCng.cs
- SqlWebEventProvider.cs
- UnsafeNativeMethods.cs
- SvcMapFileSerializer.cs
- ProtectedConfigurationSection.cs
- ActionFrame.cs
- ItemsPanelTemplate.cs
- SliderAutomationPeer.cs
- EventPrivateKey.cs
- ShaperBuffers.cs
- NavigationPropertyEmitter.cs
- ComboBoxDesigner.cs
- Soap12ProtocolImporter.cs
- ContentDisposition.cs
- _KerberosClient.cs
- ProgressBar.cs
- GenericWebPart.cs
- tooltip.cs
- XmlHelper.cs