Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / IdentityModel / System / IdentityModel / MostlySingletonList.cs / 1305376 / MostlySingletonList.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.IdentityModel { 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 ) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("count", SR.GetString(SR.ValueMustBeOne))); } if (index != 0) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("index", SR.GetString(SR.ValueMustBeZero))); } } 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.
Link Menu
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PrimaryKeyTypeConverter.cs
- XmlSchemaComplexContentRestriction.cs
- CustomAssemblyResolver.cs
- X509Chain.cs
- RepeatBehavior.cs
- SafeRegistryKey.cs
- TableHeaderCell.cs
- XmlSubtreeReader.cs
- _IPv6Address.cs
- SettingsPropertyValue.cs
- FlowDocument.cs
- Misc.cs
- ProtocolsConfigurationHandler.cs
- MethodImplAttribute.cs
- InfoCardKeyedHashAlgorithm.cs
- StringUtil.cs
- CompilerError.cs
- ISAPIWorkerRequest.cs
- Html32TextWriter.cs
- DataColumnPropertyDescriptor.cs
- SynchronizedDispatch.cs
- TargetFrameworkUtil.cs
- SqlIdentifier.cs
- DocumentViewerConstants.cs
- DesignerHelpers.cs
- util.cs
- MonitoringDescriptionAttribute.cs
- SqlUserDefinedAggregateAttribute.cs
- RtType.cs
- DataControlFieldCollection.cs
- CodeGenerator.cs
- DataGridTextBoxColumn.cs
- UriSection.cs
- WebResponse.cs
- XmlEntity.cs
- ComEventsInfo.cs
- GcHandle.cs
- CompilerError.cs
- GPStream.cs
- CompositeFontParser.cs
- Stacktrace.cs
- MergeFailedEvent.cs
- KeyEventArgs.cs
- cookie.cs
- TextFindEngine.cs
- AsyncCodeActivityContext.cs
- XPathChildIterator.cs
- Timer.cs
- GenericXmlSecurityTokenAuthenticator.cs
- OdbcStatementHandle.cs
- XmlTextEncoder.cs
- FilePresentation.cs
- EditingCommands.cs
- ObjectListCommandEventArgs.cs
- DeferrableContentConverter.cs
- PropertyCondition.cs
- HostingEnvironmentWrapper.cs
- BamlWriter.cs
- ExpressionVisitor.cs
- DynamicRenderer.cs
- Variant.cs
- LoginUtil.cs
- EventLogPermissionAttribute.cs
- KeyPressEvent.cs
- SendKeys.cs
- NameValueCollection.cs
- ResourceType.cs
- PreservationFileWriter.cs
- SqlDataAdapter.cs
- QilTargetType.cs
- HMACSHA384.cs
- AudioBase.cs
- RemoteWebConfigurationHostStream.cs
- Normalization.cs
- TagMapInfo.cs
- ListItemCollection.cs
- TransformerConfigurationWizardBase.cs
- LinkLabel.cs
- FormatSettings.cs
- MsmqIntegrationInputChannel.cs
- Transform3D.cs
- _BufferOffsetSize.cs
- NativeMethodsCLR.cs
- DocumentPaginator.cs
- SelectingProviderEventArgs.cs
- Invariant.cs
- GridEntry.cs
- Atom10ItemFormatter.cs
- QuadTree.cs
- SafeCertificateContext.cs
- UmAlQuraCalendar.cs
- ServiceReference.cs
- XMLSyntaxException.cs
- CultureMapper.cs
- OrderByQueryOptionExpression.cs
- ProfileGroupSettings.cs
- DeviceSpecificChoice.cs
- TogglePatternIdentifiers.cs
- RegexTree.cs
- SkinBuilder.cs