StringAttributeCollection.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Configuration / System / Configuration / StringAttributeCollection.cs / 1305376 / StringAttributeCollection.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

using System; 
using System.ComponentModel; 
using System.Security.Permissions;
using System.Collections.Generic; 
using System.Collections.Specialized;
using System.Reflection;
using System.Text;
 
namespace System.Configuration {
 
    public sealed class CommaDelimitedStringCollection : StringCollection { 
        private bool _Modified;
        private bool _ReadOnly; 
        private string _OriginalString;

        //
        // Constructor 
        //
 
        public CommaDelimitedStringCollection() { 
            _ReadOnly = false;
            _Modified = false; 
            _OriginalString = ToString();
        }

        internal void FromString(string list) { 
            char[] _delimiters = { ',' };
            if (list != null) { 
                string[] items = list.Split(_delimiters); 
                foreach (string item in items) {
                    string trimmedItem = item.Trim(); 
                    if (trimmedItem.Length != 0) {
                        Add(item.Trim());
                    }
                } 
            }
            _OriginalString = ToString(); 
            _ReadOnly = false; 
            _Modified = false;
        } 

        public override string ToString() {
            string returnString = null;
 
            if (Count > 0) {
                StringBuilder sb = new StringBuilder(); 
                foreach (string str in this) { 
                    ThrowIfContainsDelimiter(str); // Since the add methods are not virtual they could still add bad data
                                                   // by casting the collection to a string collection.  This check will catch 
                                                   // it before serialization, late is better than never.
                    sb.Append(str.Trim());
                    sb.Append(',');
                } 
                returnString = sb.ToString();
                if (returnString.Length > 0) { 
                    returnString = returnString.Substring(0, returnString.Length - 1); 
                }
                if (returnString.Length == 0) { 
                    returnString = null;
                }
            }
            return returnString; 
        }
 
        private void ThrowIfReadOnly() { 
            if (IsReadOnly == true) {
                throw new ConfigurationErrorsException(SR.GetString(SR.Config_base_read_only)); 
            }
        }

        private void ThrowIfContainsDelimiter(string value) { 
            if (value.Contains(",")) {
                throw new ConfigurationErrorsException(SR.GetString(SR.Config_base_value_cannot_contain,",")); 
            } 
        }
 
        public void SetReadOnly() {
            _ReadOnly = true;
        }
 
        public bool IsModified {
            get { 
                return _Modified || (ToString() != _OriginalString); 
            }
        } 

        public new bool IsReadOnly {
            get {
                return _ReadOnly; 
            }
        } 
 
        //
        // Accessors 
        //
        public new string this[int index] {
            get {
                return (string)base[index]; 
            }
            set { 
                ThrowIfReadOnly(); 
                ThrowIfContainsDelimiter(value);
                _Modified = true; 
                base[index] = value.Trim();
            }
        }
 
        //
        // Methods 
        // 

        public new void Add(string value) { 
            ThrowIfReadOnly();
            ThrowIfContainsDelimiter(value);
            _Modified = true;
            base.Add(value.Trim()); 
        }
 
        public new void AddRange(string[] range) { 
            ThrowIfReadOnly();
            _Modified = true; 
            foreach (string str in range) {
                ThrowIfContainsDelimiter(str);
                base.Add(str.Trim());
            } 
        }
 
        public new void Clear() { 
            ThrowIfReadOnly();
            _Modified = true; 
            base.Clear();
        }
        public new void Insert(int index, string value) {
            ThrowIfReadOnly(); 
            ThrowIfContainsDelimiter(value);
            _Modified = true; 
            base.Insert(index, value.Trim()); 
        }
 
        public new void Remove(string value) {
            ThrowIfReadOnly();
            ThrowIfContainsDelimiter(value);
            _Modified = true; 
            base.Remove(value.Trim());
        } 
 
        // Clone
        // 
        // Clone the object, to get back and object that we can modify
        // without changing the original object
        //
        public CommaDelimitedStringCollection Clone() { 
            CommaDelimitedStringCollection copy;
 
            copy = new CommaDelimitedStringCollection(); 

            // Copy all values 
            foreach (string str in this) {
                copy.Add(str);
            }
 
            // Copy Attributes
            copy._Modified = false; 
            copy._ReadOnly = _ReadOnly; 
            copy._OriginalString = _OriginalString;
 
            return copy;
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

using System; 
using System.ComponentModel; 
using System.Security.Permissions;
using System.Collections.Generic; 
using System.Collections.Specialized;
using System.Reflection;
using System.Text;
 
namespace System.Configuration {
 
    public sealed class CommaDelimitedStringCollection : StringCollection { 
        private bool _Modified;
        private bool _ReadOnly; 
        private string _OriginalString;

        //
        // Constructor 
        //
 
        public CommaDelimitedStringCollection() { 
            _ReadOnly = false;
            _Modified = false; 
            _OriginalString = ToString();
        }

        internal void FromString(string list) { 
            char[] _delimiters = { ',' };
            if (list != null) { 
                string[] items = list.Split(_delimiters); 
                foreach (string item in items) {
                    string trimmedItem = item.Trim(); 
                    if (trimmedItem.Length != 0) {
                        Add(item.Trim());
                    }
                } 
            }
            _OriginalString = ToString(); 
            _ReadOnly = false; 
            _Modified = false;
        } 

        public override string ToString() {
            string returnString = null;
 
            if (Count > 0) {
                StringBuilder sb = new StringBuilder(); 
                foreach (string str in this) { 
                    ThrowIfContainsDelimiter(str); // Since the add methods are not virtual they could still add bad data
                                                   // by casting the collection to a string collection.  This check will catch 
                                                   // it before serialization, late is better than never.
                    sb.Append(str.Trim());
                    sb.Append(',');
                } 
                returnString = sb.ToString();
                if (returnString.Length > 0) { 
                    returnString = returnString.Substring(0, returnString.Length - 1); 
                }
                if (returnString.Length == 0) { 
                    returnString = null;
                }
            }
            return returnString; 
        }
 
        private void ThrowIfReadOnly() { 
            if (IsReadOnly == true) {
                throw new ConfigurationErrorsException(SR.GetString(SR.Config_base_read_only)); 
            }
        }

        private void ThrowIfContainsDelimiter(string value) { 
            if (value.Contains(",")) {
                throw new ConfigurationErrorsException(SR.GetString(SR.Config_base_value_cannot_contain,",")); 
            } 
        }
 
        public void SetReadOnly() {
            _ReadOnly = true;
        }
 
        public bool IsModified {
            get { 
                return _Modified || (ToString() != _OriginalString); 
            }
        } 

        public new bool IsReadOnly {
            get {
                return _ReadOnly; 
            }
        } 
 
        //
        // Accessors 
        //
        public new string this[int index] {
            get {
                return (string)base[index]; 
            }
            set { 
                ThrowIfReadOnly(); 
                ThrowIfContainsDelimiter(value);
                _Modified = true; 
                base[index] = value.Trim();
            }
        }
 
        //
        // Methods 
        // 

        public new void Add(string value) { 
            ThrowIfReadOnly();
            ThrowIfContainsDelimiter(value);
            _Modified = true;
            base.Add(value.Trim()); 
        }
 
        public new void AddRange(string[] range) { 
            ThrowIfReadOnly();
            _Modified = true; 
            foreach (string str in range) {
                ThrowIfContainsDelimiter(str);
                base.Add(str.Trim());
            } 
        }
 
        public new void Clear() { 
            ThrowIfReadOnly();
            _Modified = true; 
            base.Clear();
        }
        public new void Insert(int index, string value) {
            ThrowIfReadOnly(); 
            ThrowIfContainsDelimiter(value);
            _Modified = true; 
            base.Insert(index, value.Trim()); 
        }
 
        public new void Remove(string value) {
            ThrowIfReadOnly();
            ThrowIfContainsDelimiter(value);
            _Modified = true; 
            base.Remove(value.Trim());
        } 
 
        // Clone
        // 
        // Clone the object, to get back and object that we can modify
        // without changing the original object
        //
        public CommaDelimitedStringCollection Clone() { 
            CommaDelimitedStringCollection copy;
 
            copy = new CommaDelimitedStringCollection(); 

            // Copy all values 
            foreach (string str in this) {
                copy.Add(str);
            }
 
            // Copy Attributes
            copy._Modified = false; 
            copy._ReadOnly = _ReadOnly; 
            copy._OriginalString = _OriginalString;
 
            return copy;
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.

                        

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