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
- DefaultHttpHandler.cs
- PointCollectionValueSerializer.cs
- HwndSubclass.cs
- M3DUtil.cs
- DateBoldEvent.cs
- System.Data_BID.cs
- XamlSerializer.cs
- LabelLiteral.cs
- CodeCommentStatement.cs
- ContextInformation.cs
- ValidatingReaderNodeData.cs
- Freezable.cs
- EmptyImpersonationContext.cs
- CatalogZoneBase.cs
- TemplateLookupAction.cs
- HealthMonitoringSectionHelper.cs
- DashStyles.cs
- EntityReference.cs
- SiteMapSection.cs
- DeferredElementTreeState.cs
- RemoveStoryboard.cs
- DataGridViewImageColumn.cs
- ModelItemCollectionImpl.cs
- InputLanguageProfileNotifySink.cs
- EventSinkHelperWriter.cs
- SizeFConverter.cs
- TextViewSelectionProcessor.cs
- securitycriticaldataClass.cs
- SqlLiftIndependentRowExpressions.cs
- ISFTagAndGuidCache.cs
- AssemblyCache.cs
- DataContractFormatAttribute.cs
- ErrorFormatter.cs
- loginstatus.cs
- MailDefinition.cs
- SQLStringStorage.cs
- GregorianCalendarHelper.cs
- XmlLanguage.cs
- FunctionCommandText.cs
- DataMemberAttribute.cs
- StubHelpers.cs
- TextContainerChangedEventArgs.cs
- DispatcherOperation.cs
- BinaryNode.cs
- MissingManifestResourceException.cs
- Clock.cs
- Vector3DAnimationBase.cs
- DispatcherSynchronizationContext.cs
- TextRangeEditLists.cs
- IndexOutOfRangeException.cs
- XPathNavigator.cs
- ListenerTraceUtility.cs
- RectAnimation.cs
- DataSourceViewSchemaConverter.cs
- ConfigurationManagerInternal.cs
- ExtenderControl.cs
- TableRowCollection.cs
- AdRotator.cs
- HtmlInputControl.cs
- CodeTypeReference.cs
- FreezableCollection.cs
- FileAuthorizationModule.cs
- ClientData.cs
- VectorAnimation.cs
- PropertyValueChangedEvent.cs
- DbProviderSpecificTypePropertyAttribute.cs
- CollectionViewGroupInternal.cs
- SemaphoreFullException.cs
- TimeSpanSecondsConverter.cs
- DataGridViewCellMouseEventArgs.cs
- DependencyProperty.cs
- UserNameSecurityTokenAuthenticator.cs
- WMICapabilities.cs
- UnitySerializationHolder.cs
- arabicshape.cs
- ErrorHandler.cs
- ProcessProtocolHandler.cs
- StackSpiller.Generated.cs
- DesignerForm.cs
- ModelItemDictionary.cs
- SessionPageStatePersister.cs
- ComPlusThreadInitializer.cs
- SecurityPolicySection.cs
- WindowsGrip.cs
- Rect.cs
- NamespaceInfo.cs
- __TransparentProxy.cs
- BindableTemplateBuilder.cs
- EventLogConfiguration.cs
- HostedHttpContext.cs
- OdbcEnvironmentHandle.cs
- SuppressMergeCheckAttribute.cs
- PolicyImporterElement.cs
- ChangeProcessor.cs
- ExpressionLink.cs
- COM2ExtendedBrowsingHandler.cs
- PersonalizablePropertyEntry.cs
- ProcessInputEventArgs.cs
- IndicFontClient.cs
- ColorContext.cs