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
- returneventsaver.cs
- StrongNamePublicKeyBlob.cs
- FixedStringLookup.cs
- DropShadowBitmapEffect.cs
- ScrollEventArgs.cs
- DataGridViewSelectedCellCollection.cs
- SecurityDescriptor.cs
- BuiltInExpr.cs
- ConsoleKeyInfo.cs
- HttpStreams.cs
- UnsafeNativeMethods.cs
- WarningException.cs
- PlainXmlWriter.cs
- ListParagraph.cs
- CacheDependency.cs
- ColorAnimationBase.cs
- TemplateControlBuildProvider.cs
- RichTextBoxConstants.cs
- InitializationEventAttribute.cs
- FixedSOMPageElement.cs
- OverlappedAsyncResult.cs
- Literal.cs
- FileDialogCustomPlace.cs
- AutomationPeer.cs
- WsatEtwTraceListener.cs
- ConnectionConsumerAttribute.cs
- WebPartZoneBase.cs
- DrawingContextWalker.cs
- SourceFileInfo.cs
- odbcmetadatacolumnnames.cs
- ThreadExceptionDialog.cs
- DBSqlParserColumnCollection.cs
- XLinq.cs
- DownloadProgressEventArgs.cs
- ObjectItemCollection.cs
- StorageEndPropertyMapping.cs
- ComponentEditorForm.cs
- TypeDescriptorContext.cs
- LocalizationComments.cs
- ListItemCollection.cs
- OdbcDataReader.cs
- InkCollectionBehavior.cs
- CodeGroup.cs
- NestedContainer.cs
- SQLByteStorage.cs
- EncryptedReference.cs
- ScriptResourceHandler.cs
- VirtualPathUtility.cs
- ModelPerspective.cs
- ProxyHwnd.cs
- CorePropertiesFilter.cs
- IdentityValidationException.cs
- Duration.cs
- OptimizerPatterns.cs
- EntityConnection.cs
- StreamReader.cs
- NegotiateStream.cs
- ConsoleEntryPoint.cs
- XmlEnumAttribute.cs
- OutputCacheSettings.cs
- XmlQualifiedName.cs
- DataGridViewColumnCollectionEditor.cs
- XmlCharCheckingWriter.cs
- WindowsEditBox.cs
- IListConverters.cs
- NameNode.cs
- QuestionEventArgs.cs
- QilInvokeLateBound.cs
- OperatorExpressions.cs
- PlanCompiler.cs
- SEHException.cs
- ScaleTransform.cs
- DataGridViewTextBoxCell.cs
- SingleStorage.cs
- CounterSampleCalculator.cs
- AppDomainShutdownMonitor.cs
- DataGridViewColumn.cs
- BitmapInitialize.cs
- sqlcontext.cs
- ImageMapEventArgs.cs
- SetterTriggerConditionValueConverter.cs
- MenuCommand.cs
- ExceptionDetail.cs
- StaticSiteMapProvider.cs
- Logging.cs
- ButtonFlatAdapter.cs
- HttpHandlerActionCollection.cs
- HwndSubclass.cs
- ObjectSpanRewriter.cs
- RegularExpressionValidator.cs
- UIElementParagraph.cs
- GridViewColumnCollection.cs
- Matrix.cs
- DataColumnCollection.cs
- RegisteredArrayDeclaration.cs
- InputProviderSite.cs
- ProcessHostFactoryHelper.cs
- StrongNameKeyPair.cs
- RtfNavigator.cs
- ListBoxChrome.cs