AngleSharp by AngleSharp

<PackageReference Include="AngleSharp" Version="0.9.9" />

 TokenList

A simple list of tokens that is immutable.
using AngleSharp.Extensions; using System; using System.Collections; using System.Collections.Generic; namespace AngleSharp.Dom.Collections { internal class TokenList : ITokenList, IEnumerable<string>, IEnumerable, IBindable { private readonly List<string> _tokens; public string this[int index] { get { return _tokens[index]; } } public int Length => _tokens.Count; public event Action<string> Changed; internal TokenList(string value) { _tokens = new List<string>(); Update(value); } public void Update(string value) { _tokens.Clear(); if (!string.IsNullOrEmpty(value)) { string[] array = value.SplitSpaces(); for (int i = 0; i < array.Length; i++) { if (!_tokens.Contains(array[i])) _tokens.Add(array[i]); } } } public bool Contains(string token) { return _tokens.Contains(token); } public void Remove(params string[] tokens) { bool flag = false; foreach (string item in tokens) { if (_tokens.Contains(item)) { _tokens.Remove(item); flag = true; } } if (flag) RaiseChanged(); } public void Add(params string[] tokens) { bool flag = false; foreach (string item in tokens) { if (!_tokens.Contains(item)) { _tokens.Add(item); flag = true; } } if (flag) RaiseChanged(); } public bool Toggle(string token, bool force = false) { bool flag = _tokens.Contains(token); if (flag & force) return true; if (flag) _tokens.Remove(token); else _tokens.Add(token); RaiseChanged(); return !flag; } private void RaiseChanged() { this.Changed?.Invoke(ToString()); } public IEnumerator<string> GetEnumerator() { return _tokens.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public override string ToString() { return string.Join(" ", _tokens); } } }