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
- BindingSource.cs
- HttpListenerException.cs
- TypeReference.cs
- CommandDevice.cs
- Instrumentation.cs
- ReadOnlyDictionary.cs
- DescendantBaseQuery.cs
- AttributeEmitter.cs
- WindowsFormsEditorServiceHelper.cs
- DesignTimeXamlWriter.cs
- SerialStream.cs
- LongTypeConverter.cs
- Encoder.cs
- SubpageParagraph.cs
- ListMarkerLine.cs
- DataSourceView.cs
- PackagingUtilities.cs
- AuthenticationModulesSection.cs
- OracleConnectionStringBuilder.cs
- TransformerConfigurationWizardBase.cs
- SplitterCancelEvent.cs
- DataGridViewCellConverter.cs
- ThemeDirectoryCompiler.cs
- FieldNameLookup.cs
- GlyphCache.cs
- XamlSerializerUtil.cs
- PointAnimationUsingPath.cs
- URLMembershipCondition.cs
- RootBrowserWindowProxy.cs
- LinkDescriptor.cs
- SqlUserDefinedAggregateAttribute.cs
- DbResourceAllocator.cs
- CodeEventReferenceExpression.cs
- HierarchicalDataSourceControl.cs
- PrinterUnitConvert.cs
- Hex.cs
- SimpleBitVector32.cs
- CodeCompileUnit.cs
- DataTableReader.cs
- UnsafeNativeMethods.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- UpdatePanelControlTrigger.cs
- SoapAttributes.cs
- ErrorView.xaml.cs
- httpapplicationstate.cs
- PageVisual.cs
- TableHeaderCell.cs
- XamlWriterExtensions.cs
- DESCryptoServiceProvider.cs
- NavigationPropertyEmitter.cs
- SqlClientPermission.cs
- ProjectedSlot.cs
- CommonDialog.cs
- XmlArrayItemAttributes.cs
- ListenerAdapterBase.cs
- Region.cs
- EntityDataSourceStatementEditor.cs
- HostedHttpRequestAsyncResult.cs
- DataControlFieldHeaderCell.cs
- VirtualPath.cs
- XamlPoint3DCollectionSerializer.cs
- GridLength.cs
- AsyncOperation.cs
- SqlCacheDependencySection.cs
- AdapterDictionary.cs
- EnumBuilder.cs
- CalendarBlackoutDatesCollection.cs
- GlobalizationAssembly.cs
- TabletCollection.cs
- DataGridViewComboBoxCell.cs
- ServiceThrottle.cs
- ToolStripDropDownClosedEventArgs.cs
- CharUnicodeInfo.cs
- LinkedResourceCollection.cs
- FunctionCommandText.cs
- ResolveMatchesCD1.cs
- MimeFormReflector.cs
- CodeTypeMember.cs
- RuntimeHandles.cs
- Math.cs
- ThemeDictionaryExtension.cs
- AnyAllSearchOperator.cs
- CodeThrowExceptionStatement.cs
- ThaiBuddhistCalendar.cs
- FormsAuthenticationConfiguration.cs
- WorkflowOperationInvoker.cs
- Descriptor.cs
- BindingsCollection.cs
- PeerNameResolver.cs
- PasswordBoxAutomationPeer.cs
- DotAtomReader.cs
- SimpleMailWebEventProvider.cs
- ListViewPagedDataSource.cs
- Deserializer.cs
- StateValidator.cs
- RelAssertionDirectKeyIdentifierClause.cs
- MessageAction.cs
- WebPageTraceListener.cs
- OleDbTransaction.cs
- Parsers.cs