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
- DuplicateWaitObjectException.cs
- XmlResolver.cs
- IisTraceWebEventProvider.cs
- ClientRuntimeConfig.cs
- DataGridViewComboBoxCell.cs
- GenericAuthenticationEventArgs.cs
- DrawingGroup.cs
- ThreadExceptionDialog.cs
- CharEntityEncoderFallback.cs
- formatter.cs
- OciHandle.cs
- XamlPointCollectionSerializer.cs
- ConfigXmlWhitespace.cs
- DateBoldEvent.cs
- ToolStripItemCollection.cs
- InitializationEventAttribute.cs
- CapacityStreamGeometryContext.cs
- GridViewCellAutomationPeer.cs
- HtmlTable.cs
- DesignerProperties.cs
- ShapingEngine.cs
- SqlServer2KCompatibilityCheck.cs
- WithStatement.cs
- XmlDocumentFragment.cs
- MemberDescriptor.cs
- SoapEnumAttribute.cs
- SizeLimitedCache.cs
- StandardToolWindows.cs
- SqlConnectionStringBuilder.cs
- InstanceDataCollectionCollection.cs
- CheckBoxFlatAdapter.cs
- ConnectionStringSettingsCollection.cs
- PageCodeDomTreeGenerator.cs
- GridViewUpdatedEventArgs.cs
- GiveFeedbackEvent.cs
- LayoutUtils.cs
- AssertFilter.cs
- CompilerScopeManager.cs
- UpdateProgress.cs
- PageWrapper.cs
- LinqDataSourceInsertEventArgs.cs
- EdmComplexTypeAttribute.cs
- Icon.cs
- DbUpdateCommandTree.cs
- TabItem.cs
- Executor.cs
- AccessDataSource.cs
- ListViewPagedDataSource.cs
- WebUtil.cs
- UrlPath.cs
- WeakReference.cs
- TextParentUndoUnit.cs
- ObjectStateManagerMetadata.cs
- HtmlTable.cs
- SqlProviderUtilities.cs
- WebHttpElement.cs
- CapacityStreamGeometryContext.cs
- IgnoreDataMemberAttribute.cs
- SQLStringStorage.cs
- OdbcConnectionHandle.cs
- DataExpression.cs
- DataError.cs
- BeginStoryboard.cs
- QueryOperationResponseOfT.cs
- SqlReferenceCollection.cs
- MetadataArtifactLoaderResource.cs
- DataGridCellsPanel.cs
- OleDragDropHandler.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- PassportIdentity.cs
- TransportReplyChannelAcceptor.cs
- CommandField.cs
- DataServiceEntityAttribute.cs
- SetterBase.cs
- JsonByteArrayDataContract.cs
- Pair.cs
- GraphicsPathIterator.cs
- XmlUrlEditor.cs
- XmlNodeComparer.cs
- AttributeCollection.cs
- ProjectionCamera.cs
- DesignUtil.cs
- __FastResourceComparer.cs
- UpDownBase.cs
- Vector3DCollection.cs
- GridViewCellAutomationPeer.cs
- SqlCacheDependency.cs
- TrackingProfile.cs
- WinEventWrap.cs
- StateMachineSubscription.cs
- Registry.cs
- WpfPayload.cs
- Triplet.cs
- XmlSchemaCompilationSettings.cs
- RenamedEventArgs.cs
- StatusBarAutomationPeer.cs
- WindowsHyperlink.cs
- InsufficientMemoryException.cs
- TypeContext.cs
- ExpressionPrefixAttribute.cs