Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / MostlySingletonList.cs / 1 / MostlySingletonList.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel { using System.Collections.Generic; // Embed this struct in a class to represent a field of that class // that is logically a list, but contains just one item in all but // the rarest of scenarios. When this class must be passed around // in internal APIs, use it as a ref parameter. struct MostlySingletonListwhere T : class { int count; T singleton; List list; public T this[int index] { get { if (this.list == null) { EnsureValidSingletonIndex(index); return this.singleton; } else { return this.list[index]; } } } public int Count { get { return this.count; } } public void Add(T item) { if (this.list == null) { if (this.count == 0) { this.singleton = item; this.count = 1; return; } this.list = new List (); this.list.Add(this.singleton); this.singleton = null; } this.list.Add(item); this.count++; } static bool Compare(T x, T y) { return x == null ? y == null : x.Equals(y); } public bool Contains(T item) { return IndexOf(item) >= 0; } void EnsureValidSingletonIndex(int index) { if (this.count != 1 || index != 0) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("index")); } } bool MatchesSingleton(T item) { return this.count == 1 && Compare(this.singleton, item); } public int IndexOf(T item) { if (this.list == null) { return MatchesSingleton(item) ? 0 : -1; } else { return this.list.IndexOf(item); } } public bool Remove(T item) { if (this.list == null) { if (MatchesSingleton(item)) { this.singleton = null; this.count = 0; return true; } else { return false; } } else { bool result = this.list.Remove(item); if (result) { this.count--; } return result; } } public void RemoveAt(int index) { if (this.list == null) { EnsureValidSingletonIndex(index); this.singleton = null; this.count = 0; } else { this.list.RemoveAt(index); this.count--; } } } } // 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
- Attributes.cs
- cache.cs
- ScriptComponentDescriptor.cs
- TraceHandler.cs
- MobileListItem.cs
- EndpointDiscoveryMetadata.cs
- SimplePropertyEntry.cs
- Knowncolors.cs
- RootProjectionNode.cs
- PropertyChange.cs
- PointHitTestParameters.cs
- ObjectQueryState.cs
- JumpItem.cs
- FieldCollectionEditor.cs
- PaintValueEventArgs.cs
- ScriptResourceAttribute.cs
- CommentAction.cs
- RequestCacheManager.cs
- ReflectPropertyDescriptor.cs
- SecurityHelper.cs
- ConstructorExpr.cs
- Merger.cs
- CompiledAction.cs
- BinaryParser.cs
- GridViewSelectEventArgs.cs
- TextServicesHost.cs
- SimpleHandlerFactory.cs
- OracleCommandBuilder.cs
- TextBreakpoint.cs
- XPathDocument.cs
- DateTimeUtil.cs
- Geometry3D.cs
- SelectionItemProviderWrapper.cs
- PictureBoxDesigner.cs
- MimeFormatExtensions.cs
- EncryptedKey.cs
- OutOfMemoryException.cs
- RequestResponse.cs
- AssemblyInfo.cs
- MarkupCompilePass1.cs
- SecurityTokenAuthenticator.cs
- SectionInput.cs
- XmlILConstructAnalyzer.cs
- UnsafeNativeMethods.cs
- ComboBoxRenderer.cs
- XmlSchemaAttributeGroupRef.cs
- SecurityCriticalDataForSet.cs
- StrongNameKeyPair.cs
- SimpleHandlerBuildProvider.cs
- File.cs
- DeflateStream.cs
- XmlElementCollection.cs
- ClientSection.cs
- DefaultValueAttribute.cs
- FormViewRow.cs
- CharacterHit.cs
- DataGridView.cs
- InvocationExpression.cs
- PersistenceTypeAttribute.cs
- ClipboardProcessor.cs
- ComboBox.cs
- FormViewUpdatedEventArgs.cs
- Pointer.cs
- HttpListenerTimeoutManager.cs
- LoadWorkflowByKeyAsyncResult.cs
- BinaryObjectWriter.cs
- ProgressBarBrushConverter.cs
- SchemaMapping.cs
- Point3DAnimationUsingKeyFrames.cs
- TypeResolver.cs
- LoginCancelEventArgs.cs
- SqlDataSourceSelectingEventArgs.cs
- _ShellExpression.cs
- X509ChainPolicy.cs
- complextypematerializer.cs
- RuntimeHelpers.cs
- EpmSourceTree.cs
- MiniAssembly.cs
- FormsAuthenticationUser.cs
- PagePropertiesChangingEventArgs.cs
- GlyphTypeface.cs
- MergablePropertyAttribute.cs
- WebBrowserContainer.cs
- UnsafeNativeMethods.cs
- NamedPipeConnectionPool.cs
- WebPartMenuStyle.cs
- TrackingMemoryStreamFactory.cs
- ListViewItemMouseHoverEvent.cs
- OleDbCommandBuilder.cs
- RemotingConfiguration.cs
- CodeConditionStatement.cs
- SecureStringHasher.cs
- LayoutEvent.cs
- InheritanceService.cs
- WebPartConnectionsCloseVerb.cs
- BitmapEffectInput.cs
- DeferredReference.cs
- XmlCodeExporter.cs
- HashCryptoHandle.cs
- XmlNodeComparer.cs