CommaDelimitedStringCollection
Represents a collection of string elements separated by commas. This class cannot be inherited.
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);
for (int i = 0; i < array.Length; i++) {
string text = array[i].Trim();
if (text.Length != 0)
Add(text);
}
}
_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;
}
}
}