AngleSharp by Florian Rappl

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

 MediaList

sealed class MediaList : IMediaList, IEnumerable<string>, IEnumerable
Represents a list of media elements.
using AngleSharp.Css; using AngleSharp.Dom.Css; using AngleSharp.Parser.Css; using System; using System.Collections; using System.Collections.Generic; namespace AngleSharp.Dom.Collections { internal sealed class MediaList : IMediaList, IEnumerable<string>, IEnumerable { private readonly List<CssMedium> _media; public string this[int index] { get { if (index < 0 || index >= _media.Count) return null; return _media[index].CssText; } } public int Length => _media.Count; public string MediaText { get { string[] array = new string[_media.Count]; for (int i = 0; i < _media.Count; i++) { array[i] = _media[i].CssText; } return string.Join(", ", array); } set { _media.Clear(); foreach (CssMedium item in CssParser.ParseMediaList(value, null)) { if (item == null) throw new DomException(ErrorCode.Syntax); _media.Add(item); } } } internal MediaList() { _media = new List<CssMedium>(); } public bool Validate(RenderDevice device) { foreach (CssMedium medium in _media) { if (!medium.Validate(device)) return false; } return true; } public void Add(string newMedium) { CssMedium cssMedium = CssParser.ParseMedium(newMedium, null); if (cssMedium == null) throw new DomException(ErrorCode.Syntax); _media.Add(cssMedium); } public void Remove(string oldMedium) { CssMedium cssMedium = CssParser.ParseMedium(oldMedium, null); if (cssMedium == null) throw new DomException(ErrorCode.Syntax); foreach (CssMedium medium in _media) { if (medium.Equals(cssMedium)) { _media.Remove(medium); return; } } throw new DomException(ErrorCode.ItemNotFound); } internal void Add(CssMedium medium) { _media.Add(medium); } internal void Import(MediaList list) { _media.Clear(); _media.AddRange(list._media); } public IEnumerator<string> GetEnumerator() { List<CssMedium>.Enumerator enumerator = _media.GetEnumerator(); try { while (enumerator.MoveNext()) { CssMedium current = enumerator.Current; yield return current.CssText; } } finally { ((IDisposable)enumerator).Dispose(); } enumerator = default(List<CssMedium>.Enumerator); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } }