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
- ServiceDiscoveryElement.cs
- RawStylusInputCustomData.cs
- DataControlPagerLinkButton.cs
- UnaryNode.cs
- ConnectionProviderAttribute.cs
- SQLConvert.cs
- IFlowDocumentViewer.cs
- WebBrowser.cs
- SmiConnection.cs
- CustomDictionarySources.cs
- WebMessageEncodingBindingElement.cs
- HandlerBase.cs
- InputMethod.cs
- BamlVersionHeader.cs
- ValidationSettings.cs
- InfocardExtendedInformationCollection.cs
- SequenceFullException.cs
- AttributeExtensions.cs
- URLAttribute.cs
- DiffuseMaterial.cs
- ConnectionInterfaceCollection.cs
- WinFormsUtils.cs
- ServiceParser.cs
- WebPartExportVerb.cs
- NodeFunctions.cs
- ScriptIgnoreAttribute.cs
- ConfigurationElement.cs
- ObjectConverter.cs
- DataServiceRequestArgs.cs
- Separator.cs
- SortQuery.cs
- MarshalDirectiveException.cs
- InkCanvasFeedbackAdorner.cs
- InkCanvas.cs
- FileUpload.cs
- BooleanStorage.cs
- MouseBinding.cs
- TabPage.cs
- ImageListUtils.cs
- MemberHolder.cs
- AffineTransform3D.cs
- SqlMultiplexer.cs
- MembershipUser.cs
- WindowsTreeView.cs
- remotingproxy.cs
- sortedlist.cs
- HostedHttpContext.cs
- MetadataUtil.cs
- Pair.cs
- CmsInterop.cs
- InstanceStore.cs
- GeneralTransform2DTo3D.cs
- Expression.cs
- Label.cs
- RepeatButtonAutomationPeer.cs
- HijriCalendar.cs
- ResourceDisplayNameAttribute.cs
- OdbcConnectionHandle.cs
- HtmlElement.cs
- SmiSettersStream.cs
- DataContractSerializerSection.cs
- GeometryModel3D.cs
- LoadRetryStrategyFactory.cs
- ListSortDescriptionCollection.cs
- TreeNodeBindingCollection.cs
- FunctionDetailsReader.cs
- GlobalDataBindingHandler.cs
- SQLGuid.cs
- UiaCoreTypesApi.cs
- TreeNodeMouseHoverEvent.cs
- SafeNativeMethods.cs
- OleDbPermission.cs
- XPathNodeIterator.cs
- HGlobalSafeHandle.cs
- FileIOPermission.cs
- BlobPersonalizationState.cs
- CanExecuteRoutedEventArgs.cs
- MasterPageCodeDomTreeGenerator.cs
- EnglishPluralizationService.cs
- WebConfigManager.cs
- LineBreak.cs
- PersonalizableTypeEntry.cs
- SchemaSetCompiler.cs
- DataServiceResponse.cs
- HtmlInputPassword.cs
- ProfileParameter.cs
- ConfigurationManagerHelper.cs
- RootBrowserWindowAutomationPeer.cs
- EditorBrowsableAttribute.cs
- Simplifier.cs
- EntityDataSourceUtil.cs
- DeferrableContent.cs
- SamlDelegatingWriter.cs
- RandomNumberGenerator.cs
- UiaCoreTypesApi.cs
- CancellationTokenSource.cs
- ConfigurationValidatorAttribute.cs
- Italic.cs
- StdValidatorsAndConverters.cs
- DataTrigger.cs