Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / security / system / security / authentication / ExtendedProtection / ServiceNameCollection.cs / 1305376 / ServiceNameCollection.cs
using System; using System.Collections.ObjectModel; using System.Collections.Generic; using System.Collections; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; namespace System.Security.Authentication.ExtendedProtection { // derived from ReadOnlyCollectionBase because it needs to be back ported to .Net 1.x [SuppressMessage("Microsoft.Design","CA1058:TypesShouldNotExtendCertainBaseTypes", Justification="changing this would be a breaking change; this code has already shipped")] [Serializable] public class ServiceNameCollection : ReadOnlyCollectionBase { public ServiceNameCollection(ICollection items) { if (items == null) { throw new ArgumentNullException("items"); } InnerList.AddRange(items); } public ServiceNameCollection Merge(string serviceName) { ArrayList newServiceNames = new ArrayList(); // be compatible with .Net 1.x; no generics newServiceNames.AddRange(this.InnerList); AddIfNew(newServiceNames, serviceName); ServiceNameCollection newCollection = new ServiceNameCollection(newServiceNames); return newCollection; } public ServiceNameCollection Merge(IEnumerable serviceNames) { ArrayList newServiceNames = new ArrayList(); // be compatible with .Net 1.x; no generics newServiceNames.AddRange(this.InnerList); // we have a pretty bad performance here: O(n^2), but since service name lists should // be small (<<50) and Merge() should not be called frequently, this shouldn't be an issue foreach (object item in serviceNames) { AddIfNew(newServiceNames, item as string); } ServiceNameCollection newCollection = new ServiceNameCollection(newServiceNames); return newCollection; } private void AddIfNew(ArrayList newServiceNames, string serviceName) { if (String.IsNullOrEmpty(serviceName)) { throw new ArgumentException(SR.GetString(SR.security_ServiceNameCollection_EmptyServiceName)); } if (!Contains(serviceName, newServiceNames)) { newServiceNames.Add(serviceName); } } private bool Contains(string searchServiceName, ICollection serviceNames) { Debug.Assert(serviceNames != null); Debug.Assert(!String.IsNullOrEmpty(searchServiceName)); bool found = false; foreach (string serviceName in serviceNames) { if (String.Compare(serviceName, searchServiceName, StringComparison.OrdinalIgnoreCase) == 0) { found = true; break; } } return found; } } } // 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
- Monitor.cs
- Cursors.cs
- Window.cs
- RtfNavigator.cs
- ListControlDesigner.cs
- CoreSwitches.cs
- SqlClientWrapperSmiStream.cs
- SafeNativeMethodsCLR.cs
- SmtpNetworkElement.cs
- ButtonAutomationPeer.cs
- PtsHelper.cs
- DataServiceHostFactory.cs
- IdnMapping.cs
- GeneralTransform3D.cs
- ReadOnlyPropertyMetadata.cs
- UIElementHelper.cs
- ObjectPersistData.cs
- ItemsControlAutomationPeer.cs
- XmlJsonReader.cs
- PropertyPath.cs
- GZipStream.cs
- SqlDuplicator.cs
- DirectoryInfo.cs
- RefType.cs
- ItemCheckEvent.cs
- DropSource.cs
- MergeExecutor.cs
- WhitespaceRule.cs
- ConstraintConverter.cs
- CodeLinePragma.cs
- Point3D.cs
- SqlDataRecord.cs
- UnsafePeerToPeerMethods.cs
- ConvertersCollection.cs
- BooleanFunctions.cs
- WeakKeyDictionary.cs
- SuppressIldasmAttribute.cs
- X509UI.cs
- ClientRuntimeConfig.cs
- XmlSchemaExporter.cs
- PageRanges.cs
- PropertyCollection.cs
- CodeDomComponentSerializationService.cs
- SyndicationCategory.cs
- Registration.cs
- EnumType.cs
- SafeTimerHandle.cs
- ThreadStartException.cs
- Column.cs
- TreeViewEvent.cs
- SafeNativeMethodsOther.cs
- DataGridLinkButton.cs
- ListBoxItemAutomationPeer.cs
- streamingZipPartStream.cs
- ObfuscateAssemblyAttribute.cs
- GradientBrush.cs
- DataGridViewToolTip.cs
- DialogResultConverter.cs
- XmlSchemaElement.cs
- ByteKeyFrameCollection.cs
- ComponentCommands.cs
- ModelFunction.cs
- WebRequestModuleElement.cs
- PolyBezierSegment.cs
- DeclarativeCatalogPart.cs
- SqlConnection.cs
- ServerIdentity.cs
- ThrowOnMultipleAssignment.cs
- Invariant.cs
- NamespaceCollection.cs
- DbConnectionPoolOptions.cs
- GiveFeedbackEvent.cs
- SuppressMessageAttribute.cs
- invalidudtexception.cs
- ThemeDirectoryCompiler.cs
- _UncName.cs
- SByte.cs
- Decimal.cs
- IDispatchConstantAttribute.cs
- SectionRecord.cs
- RegistryExceptionHelper.cs
- ActivationServices.cs
- SqlCommandBuilder.cs
- IteratorFilter.cs
- HttpTransportElement.cs
- WindowsMenu.cs
- BehaviorEditorPart.cs
- ImplicitInputBrush.cs
- PageThemeBuildProvider.cs
- HtmlProps.cs
- TranslateTransform3D.cs
- TransportOutputChannel.cs
- NumberFormatter.cs
- BlockExpression.cs
- ServiceDurableInstance.cs
- RowParagraph.cs
- InkPresenter.cs
- MdImport.cs
- ComboBox.cs
- TypeConverterAttribute.cs