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
- VirtualPathData.cs
- FixedSOMFixedBlock.cs
- Matrix.cs
- SafeCryptContextHandle.cs
- TraceLog.cs
- TypeReference.cs
- HandleCollector.cs
- WindowsGraphicsWrapper.cs
- WebBrowsableAttribute.cs
- CompiledQueryCacheEntry.cs
- DBDataPermission.cs
- CodeTypeMemberCollection.cs
- AppDomainInstanceProvider.cs
- PlatformNotSupportedException.cs
- FileVersionInfo.cs
- StickyNoteContentControl.cs
- ObjectManager.cs
- BehaviorEditorPart.cs
- WindowsUpDown.cs
- Blend.cs
- SqlClientMetaDataCollectionNames.cs
- SelectorAutomationPeer.cs
- WithStatement.cs
- DocumentGridContextMenu.cs
- SerializationInfoEnumerator.cs
- complextypematerializer.cs
- ConfigXmlComment.cs
- CacheOutputQuery.cs
- CodeGenerationManager.cs
- DateTimeFormat.cs
- WebEvents.cs
- HttpFileCollectionWrapper.cs
- DiscoveryEndpoint.cs
- NameGenerator.cs
- WebPartExportVerb.cs
- HwndSourceKeyboardInputSite.cs
- ValidationContext.cs
- FolderLevelBuildProviderAppliesToAttribute.cs
- StylusPointPropertyInfoDefaults.cs
- DbXmlEnabledProviderManifest.cs
- EntityDataSourceEntityTypeFilterConverter.cs
- DeferredReference.cs
- TemplateInstanceAttribute.cs
- RunInstallerAttribute.cs
- ConfigurationStrings.cs
- DataGridViewCellEventArgs.cs
- RegexCaptureCollection.cs
- FixedSOMTextRun.cs
- grammarelement.cs
- SqlServices.cs
- Grant.cs
- TemplateField.cs
- JobPageOrder.cs
- FlowDocumentScrollViewer.cs
- JulianCalendar.cs
- ipaddressinformationcollection.cs
- FrameworkElementAutomationPeer.cs
- XmlSerializerFormatAttribute.cs
- Accessible.cs
- AnnotationDocumentPaginator.cs
- AppDomainResourcePerfCounters.cs
- IDQuery.cs
- FixedSOMTextRun.cs
- SecurityRuntime.cs
- EntityDataSourceDataSelection.cs
- Label.cs
- Pool.cs
- ListViewItemMouseHoverEvent.cs
- CodeSubDirectoriesCollection.cs
- ControlTemplate.cs
- SwitchLevelAttribute.cs
- TraceFilter.cs
- AsyncOperation.cs
- SqlDependencyListener.cs
- EllipseGeometry.cs
- InvalidComObjectException.cs
- DoubleAnimationUsingPath.cs
- CachingHintValidation.cs
- ProviderBase.cs
- Command.cs
- UITypeEditor.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- RectIndependentAnimationStorage.cs
- WorkflowPersistenceService.cs
- AlphabeticalEnumConverter.cs
- IUnknownConstantAttribute.cs
- FileDetails.cs
- SslStream.cs
- PenContext.cs
- GroupBoxDesigner.cs
- SpStreamWrapper.cs
- EmissiveMaterial.cs
- XmlToDatasetMap.cs
- WindowsTitleBar.cs
- QuestionEventArgs.cs
- DataGridTableCollection.cs
- RequestCacheManager.cs
- SchemaCreator.cs
- TreeNodeClickEventArgs.cs
- WebEncodingValidator.cs