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
- IChannel.cs
- AppSecurityManager.cs
- Selection.cs
- HttpRuntimeSection.cs
- DataGridTable.cs
- CqlLexerHelpers.cs
- ControlBindingsConverter.cs
- DrawingVisualDrawingContext.cs
- StyleCollection.cs
- RangeValueProviderWrapper.cs
- ColorAnimation.cs
- ResourceReferenceExpression.cs
- TemplateControl.cs
- Padding.cs
- ImpersonateTokenRef.cs
- StringPropertyBuilder.cs
- BitConverter.cs
- ServerType.cs
- SamlAdvice.cs
- SqlClientWrapperSmiStream.cs
- SimpleMailWebEventProvider.cs
- WebPartTransformerCollection.cs
- LogLogRecordEnumerator.cs
- UxThemeWrapper.cs
- ThousandthOfEmRealPoints.cs
- AutomationInteropProvider.cs
- LocationReferenceEnvironment.cs
- DesignerLabelAdapter.cs
- EllipticalNodeOperations.cs
- RightsManagementPermission.cs
- DecimalAnimationUsingKeyFrames.cs
- DebugInfo.cs
- ConfigXmlText.cs
- Exceptions.cs
- Message.cs
- ResourceExpressionBuilder.cs
- EntityContainerRelationshipSet.cs
- EventLogInformation.cs
- Rect.cs
- UrlMappingsSection.cs
- DispatcherFrame.cs
- WebMessageEncodingElement.cs
- BoundPropertyEntry.cs
- ModelService.cs
- TreeSet.cs
- CompiledQuery.cs
- InvalidTimeZoneException.cs
- LiteralControl.cs
- AttachedAnnotation.cs
- DbDataSourceEnumerator.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- ColumnBinding.cs
- TypeLoadException.cs
- MDIClient.cs
- XsdCachingReader.cs
- XmlSerializableServices.cs
- RouteParametersHelper.cs
- UIElementParagraph.cs
- UnsafeCollabNativeMethods.cs
- RayHitTestParameters.cs
- ConfigPathUtility.cs
- SqlUtils.cs
- ValueSerializer.cs
- UIElement.cs
- SystemIcmpV4Statistics.cs
- EncryptedReference.cs
- Validator.cs
- OleStrCAMarshaler.cs
- ProviderIncompatibleException.cs
- DoubleLink.cs
- DataFormat.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- DeobfuscatingStream.cs
- ServiceBuildProvider.cs
- BooleanToSelectiveScrollingOrientationConverter.cs
- Visual3D.cs
- ItemsChangedEventArgs.cs
- InfoCardService.cs
- MailBnfHelper.cs
- JsonReader.cs
- ExpressionVisitor.cs
- IsolatedStorageException.cs
- XamlFigureLengthSerializer.cs
- TimeSpan.cs
- InternalBufferManager.cs
- AllMembershipCondition.cs
- AbstractSvcMapFileLoader.cs
- PopupRootAutomationPeer.cs
- EditorZoneAutoFormat.cs
- Wizard.cs
- AliasedSlot.cs
- CompModSwitches.cs
- SQLChars.cs
- XslVisitor.cs
- Configuration.cs
- BinaryObjectWriter.cs
- ThicknessKeyFrameCollection.cs
- xml.cs
- FormsAuthentication.cs
- SchemaContext.cs