You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -0,0 +1,176 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="CommaDelimitedStringCollection.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user