<PackageReference Include="System.Configuration.ConfigurationManager" Version="7.0.0-preview.3.22175.4" />

CommaDelimitedStringCollection

using System.Collections.Specialized; using System.Text; namespace System.Configuration { public sealed class CommaDelimitedStringCollection : StringCollection { private bool _modified; private string _originalString; public bool IsModified { get { if (!_modified) return ToString() != _originalString; return true; } } public new bool IsReadOnly { get; set; } public new string this[int index] { get { return base[index]; } set { ThrowIfReadOnly(); ThrowIfContainsDelimiter(value); _modified = true; base[index] = value.Trim(); } } public CommaDelimitedStringCollection() { IsReadOnly = false; _modified = false; _originalString = ToString(); } internal void FromString(string list) { char[] separator = new char[1] { ',' }; if (list != null) { string[] array = list.Split(separator); string[] array2 = array; foreach (string text in array2) { string text2 = text.Trim(); if (text2.Length != 0) Add(text2); } } _originalString = ToString(); IsReadOnly = false; _modified = false; } public override string ToString() { if (base.Count <= 0) return null; StringBuilder stringBuilder = new StringBuilder(); StringEnumerator enumerator = GetEnumerator(); try { while (enumerator.MoveNext()) { string current = enumerator.Current; ThrowIfContainsDelimiter(current); stringBuilder.Append(current.Trim()); stringBuilder.Append(','); } } finally { (enumerator as IDisposable)?.Dispose(); } if (stringBuilder.Length > 0) stringBuilder.Length--; if (stringBuilder.Length != 0) return stringBuilder.ToString(); return null; } private void ThrowIfReadOnly() { if (IsReadOnly) throw new ConfigurationErrorsException(System.SR.Config_base_read_only); } private static void ThrowIfContainsDelimiter(string value) { if (value.Contains(",")) throw new ConfigurationErrorsException(System.SR.Format(System.SR.Config_base_value_cannot_contain, ",")); } public void SetReadOnly() { IsReadOnly = true; } 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 text in range) { ThrowIfContainsDelimiter(text); base.Add(text.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()); } public CommaDelimitedStringCollection Clone() { CommaDelimitedStringCollection commaDelimitedStringCollection = new CommaDelimitedStringCollection(); StringEnumerator enumerator = GetEnumerator(); try { while (enumerator.MoveNext()) { string current = enumerator.Current; commaDelimitedStringCollection.Add(current); } } finally { (enumerator as IDisposable)?.Dispose(); } commaDelimitedStringCollection._modified = false; commaDelimitedStringCollection.IsReadOnly = IsReadOnly; commaDelimitedStringCollection._originalString = _originalString; return commaDelimitedStringCollection; } } }