Code:
/ 4.0 / 4.0 / 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.
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
- OptimisticConcurrencyException.cs
- cookie.cs
- DataGridViewRow.cs
- Vector3DCollectionConverter.cs
- FormParameter.cs
- AdPostCacheSubstitution.cs
- WorkflowTraceTransfer.cs
- DataGridViewCellLinkedList.cs
- RelatedCurrencyManager.cs
- HtmlPanelAdapter.cs
- HierarchicalDataTemplate.cs
- PeerEndPoint.cs
- Control.cs
- FigureHelper.cs
- StringExpressionSet.cs
- DoubleAnimationBase.cs
- StrongNameMembershipCondition.cs
- SecureStringHasher.cs
- MetadataArtifactLoader.cs
- MergablePropertyAttribute.cs
- SessionPageStateSection.cs
- ViewManager.cs
- ListViewCommandEventArgs.cs
- MemberAccessException.cs
- TraceHwndHost.cs
- SystemFonts.cs
- StorageSetMapping.cs
- WebProxyScriptElement.cs
- AutoCompleteStringCollection.cs
- StylusPointPropertyInfo.cs
- HttpDebugHandler.cs
- OrCondition.cs
- RenderingEventArgs.cs
- EventSourceCreationData.cs
- _OSSOCK.cs
- ToggleProviderWrapper.cs
- ResXResourceSet.cs
- AnnouncementSendsAsyncResult.cs
- Brush.cs
- IISUnsafeMethods.cs
- Visitor.cs
- DataBindingExpressionBuilder.cs
- DataGridViewColumnCollection.cs
- Evidence.cs
- LaxModeSecurityHeaderElementInferenceEngine.cs
- OdbcDataReader.cs
- CodeAttributeArgumentCollection.cs
- Version.cs
- DbCommandTree.cs
- RoutedCommand.cs
- InlineObject.cs
- CodeSnippetCompileUnit.cs
- TaiwanLunisolarCalendar.cs
- RegistrationServices.cs
- XpsException.cs
- DesignBindingValueUIHandler.cs
- TraceContext.cs
- InfoCardSymmetricAlgorithm.cs
- RelationshipWrapper.cs
- FlowNode.cs
- SafeRightsManagementSessionHandle.cs
- UncommonField.cs
- DesignerContextDescriptor.cs
- Encoder.cs
- LassoHelper.cs
- DataGridPageChangedEventArgs.cs
- TreeNodeBindingCollection.cs
- SortedDictionary.cs
- SHA512.cs
- HostingEnvironmentWrapper.cs
- UnmanagedMemoryStreamWrapper.cs
- BindingCollection.cs
- ByteKeyFrameCollection.cs
- HttpChannelHelper.cs
- CodeMethodInvokeExpression.cs
- TemplateParser.cs
- XmlDesignerDataSourceView.cs
- TemplateBindingExpression.cs
- SchemaImporterExtension.cs
- RelationshipFixer.cs
- Msec.cs
- InProcStateClientManager.cs
- OdbcHandle.cs
- HtmlTable.cs
- ResourceExpressionBuilder.cs
- TabControl.cs
- CapabilitiesRule.cs
- FastEncoder.cs
- DataGridItemCollection.cs
- InfoCardMasterKey.cs
- FileVersion.cs
- XamlTreeBuilder.cs
- ImmutableObjectAttribute.cs
- HideDisabledControlAdapter.cs
- Clock.cs
- TypefaceMetricsCache.cs
- ExpressionParser.cs
- XNodeSchemaApplier.cs
- BufferedGraphicsContext.cs
- StateMachineHistory.cs