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
- EventLogPermission.cs
- TransactionScopeDesigner.cs
- SqlFormatter.cs
- DataGridViewButtonCell.cs
- _AuthenticationState.cs
- StrokeCollection2.cs
- SupportedAddressingMode.cs
- FileChangeNotifier.cs
- CollectionChangeEventArgs.cs
- StylusDevice.cs
- CqlGenerator.cs
- CompiledRegexRunner.cs
- PenLineCapValidation.cs
- sitestring.cs
- RIPEMD160Managed.cs
- ListViewItemMouseHoverEvent.cs
- BindingOperations.cs
- OrderedHashRepartitionStream.cs
- ExitEventArgs.cs
- TransformPattern.cs
- UIPropertyMetadata.cs
- FixedTextView.cs
- SpeechRecognizer.cs
- OpCodes.cs
- ConfigXmlText.cs
- EventMappingSettingsCollection.cs
- TreeNodeEventArgs.cs
- FrameworkElementFactoryMarkupObject.cs
- LogPolicy.cs
- EntityCommandCompilationException.cs
- RemoteWebConfigurationHost.cs
- UnsafeNativeMethods.cs
- PointAnimation.cs
- BrowserInteropHelper.cs
- CodeValidator.cs
- OperatorExpressions.cs
- SqlConnectionStringBuilder.cs
- WebPartHeaderCloseVerb.cs
- SqlCommand.cs
- RequestNavigateEventArgs.cs
- EntityDataSourceEntityTypeFilterItem.cs
- InfiniteTimeSpanConverter.cs
- CaseStatement.cs
- NodeFunctions.cs
- DataSourceDesigner.cs
- NullToBooleanConverter.cs
- ComponentTray.cs
- Command.cs
- EntityTypeEmitter.cs
- UserUseLicenseDictionaryLoader.cs
- PhysicalAddress.cs
- LogicalTreeHelper.cs
- ContainerFilterService.cs
- ConditionValidator.cs
- FileAuthorizationModule.cs
- SecUtil.cs
- _BasicClient.cs
- DataObjectMethodAttribute.cs
- ToolStripLocationCancelEventArgs.cs
- GeneralTransform2DTo3DTo2D.cs
- IPipelineRuntime.cs
- SemanticAnalyzer.cs
- XmlComment.cs
- ExtensionSimplifierMarkupObject.cs
- QueueNameHelper.cs
- ArgumentException.cs
- DataGridViewCheckBoxCell.cs
- UnionExpr.cs
- ApplicationProxyInternal.cs
- MdiWindowListStrip.cs
- AssemblyHash.cs
- ExpressionConverter.cs
- SetterBaseCollection.cs
- WebPartZoneCollection.cs
- FunctionImportElement.cs
- StylusCollection.cs
- ViewManagerAttribute.cs
- TagMapCollection.cs
- WebPartTransformerAttribute.cs
- RangeValuePattern.cs
- CardSpaceException.cs
- NamedPermissionSet.cs
- WebPartCollection.cs
- DocumentViewerBase.cs
- APCustomTypeDescriptor.cs
- ColorDialog.cs
- XmlDataSource.cs
- Publisher.cs
- Attributes.cs
- ConfigurationElement.cs
- SqlDataSourceCache.cs
- hwndwrapper.cs
- SynchronizationLockException.cs
- SoapReflector.cs
- WindowsGraphicsWrapper.cs
- ActiveXHost.cs
- GraphicsState.cs
- UnaryExpression.cs
- DefaultValueAttribute.cs
- HMAC.cs