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
- MetabaseSettings.cs
- CatalogZoneBase.cs
- XmlMembersMapping.cs
- SafeBitVector32.cs
- RegexInterpreter.cs
- UpdateManifestForBrowserApplication.cs
- WebResourceUtil.cs
- ConnectAlgorithms.cs
- XsltException.cs
- BitmapEditor.cs
- MapPathBasedVirtualPathProvider.cs
- newitemfactory.cs
- TextServicesDisplayAttribute.cs
- BackgroundWorker.cs
- Exceptions.cs
- Label.cs
- DeploymentExceptionMapper.cs
- WebBrowserContainer.cs
- QueryPageSettingsEventArgs.cs
- DnsEndPoint.cs
- ButtonField.cs
- HashHelpers.cs
- MethodRental.cs
- SqlRetyper.cs
- TableColumn.cs
- ObjectReferenceStack.cs
- TypeBuilder.cs
- GridEntryCollection.cs
- ISAPIRuntime.cs
- WorkflowServiceNamespace.cs
- ToolboxItemAttribute.cs
- QilCloneVisitor.cs
- RealProxy.cs
- AggregateException.cs
- OperandQuery.cs
- AutomationPropertyInfo.cs
- ByteArrayHelperWithString.cs
- CompareInfo.cs
- HtmlTextArea.cs
- SizeAnimationUsingKeyFrames.cs
- TypographyProperties.cs
- URLBuilder.cs
- PolicyManager.cs
- processwaithandle.cs
- SchemaImporterExtension.cs
- IdnElement.cs
- Models.cs
- DockPatternIdentifiers.cs
- PartitionedDataSource.cs
- SelectionBorderGlyph.cs
- XmlDeclaration.cs
- MetadataItem.cs
- TextWriter.cs
- ObjectHandle.cs
- CapiSymmetricAlgorithm.cs
- FileSystemWatcher.cs
- UInt16.cs
- ExpressionList.cs
- MouseGestureConverter.cs
- Block.cs
- ListenDesigner.cs
- EditorZoneDesigner.cs
- QueryPrefixOp.cs
- PocoPropertyAccessorStrategy.cs
- CollectionDataContractAttribute.cs
- SelectorItemAutomationPeer.cs
- TextRangeProviderWrapper.cs
- ScriptingProfileServiceSection.cs
- XsltOutput.cs
- SqlWriter.cs
- SplitContainer.cs
- Win32KeyboardDevice.cs
- MembershipSection.cs
- _ShellExpression.cs
- SimpleBitVector32.cs
- PrintDialogDesigner.cs
- SqlClientFactory.cs
- EntityParameterCollection.cs
- InputLanguage.cs
- Int32AnimationBase.cs
- Encoding.cs
- ObservableCollection.cs
- ListViewTableRow.cs
- WindowsListView.cs
- CorrelationToken.cs
- VectorValueSerializer.cs
- SafeFileMappingHandle.cs
- ListBindingConverter.cs
- ObjectPersistData.cs
- JulianCalendar.cs
- SectionUpdates.cs
- Stroke.cs
- ReceiveContent.cs
- DataTrigger.cs
- URLMembershipCondition.cs
- QualificationDataItem.cs
- StrongNameKeyPair.cs
- ReplacementText.cs
- BindingNavigatorDesigner.cs
- GenericUriParser.cs