ServiceNameCollection.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / security / system / security / authentication / ExtendedProtection / ServiceNameCollection.cs / 1 / ServiceNameCollection.cs

                            using System; 
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.Collections;
using System.Diagnostics; 

namespace System.Security.Authentication.ExtendedProtection 
{ 
    // derived from ReadOnlyCollectionBase because it needs to be back ported to .Net 1.x
    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.InvariantCultureIgnoreCase) == 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; 

namespace System.Security.Authentication.ExtendedProtection 
{ 
    // derived from ReadOnlyCollectionBase because it needs to be back ported to .Net 1.x
    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.InvariantCultureIgnoreCase) == 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

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK