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
- JsonQNameDataContract.cs
- SynchronizationLockException.cs
- TraceSection.cs
- ObjectSerializerFactory.cs
- GC.cs
- WebPartHeaderCloseVerb.cs
- UnsettableComboBox.cs
- MetadataCache.cs
- CategoryAttribute.cs
- ObjRef.cs
- ClientScriptManager.cs
- XmlSchemaDatatype.cs
- WebResourceUtil.cs
- Subset.cs
- PerSessionInstanceContextProvider.cs
- SqlCacheDependency.cs
- HtmlUtf8RawTextWriter.cs
- ActivityContext.cs
- Int64AnimationUsingKeyFrames.cs
- Popup.cs
- ProcessHostFactoryHelper.cs
- XPathDocumentIterator.cs
- StringBuilder.cs
- LingerOption.cs
- ErrorTolerantObjectWriter.cs
- NavigationEventArgs.cs
- HyperLinkField.cs
- MetadataItem.cs
- DataGridViewComboBoxEditingControl.cs
- DownloadProgressEventArgs.cs
- TreeView.cs
- DllHostInitializer.cs
- OracleMonthSpan.cs
- smtppermission.cs
- XmlDocumentFragment.cs
- NetNamedPipeSecurity.cs
- TypeSystem.cs
- MarkedHighlightComponent.cs
- UnsafeNativeMethods.cs
- ExtentKey.cs
- PrintPreviewControl.cs
- Set.cs
- SpellerError.cs
- BitmapDecoder.cs
- FieldCollectionEditor.cs
- CalendarDataBindingHandler.cs
- ParameterBinding.cs
- ResourceFallbackManager.cs
- FileDataSourceCache.cs
- ReflectTypeDescriptionProvider.cs
- ColorMatrix.cs
- ILGenerator.cs
- HMACSHA384.cs
- SqlCommandSet.cs
- StylusCollection.cs
- DynamicMethod.cs
- NavigationHelper.cs
- HtmlProps.cs
- ImageClickEventArgs.cs
- List.cs
- ParagraphVisual.cs
- MsmqTransportBindingElement.cs
- InternalDispatchObject.cs
- RsaSecurityToken.cs
- EncryptedXml.cs
- FlatButtonAppearance.cs
- ControlUtil.cs
- Ray3DHitTestResult.cs
- SimpleTextLine.cs
- RowToFieldTransformer.cs
- RijndaelCryptoServiceProvider.cs
- ToolStripOverflowButton.cs
- CellLabel.cs
- Tokenizer.cs
- IRCollection.cs
- TcpChannelHelper.cs
- Utils.cs
- RequiredFieldValidator.cs
- FixedPageAutomationPeer.cs
- WindowVisualStateTracker.cs
- HandlerMappingMemo.cs
- BindStream.cs
- ResourcesBuildProvider.cs
- PrePrepareMethodAttribute.cs
- AesCryptoServiceProvider.cs
- TopClause.cs
- BooleanStorage.cs
- WebPartConnectionsEventArgs.cs
- MenuStrip.cs
- TextControl.cs
- FlagsAttribute.cs
- ParameterCollectionEditorForm.cs
- ListCollectionView.cs
- InvalidChannelBindingException.cs
- HttpResponseInternalWrapper.cs
- ListViewGroupCollectionEditor.cs
- CompositeTypefaceMetrics.cs
- TemplatePropertyEntry.cs
- ImageMap.cs
- MenuStrip.cs