using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace System.Unicode { /// Allows enumeration of the code points contained in an encapsulated string, even when this one contains lone surrogates. /// /// This enumerable will allow enumeration of UTF-16 strings containing lone surrogates. /// For a more conformant enumeration of code points, please use instead. /// public struct PermissiveCodePointEnumerable : IEnumerable { private readonly string text; /// Initializes a new instance of the struct . /// The string whose code points must be enumerated. public PermissiveCodePointEnumerable(string text) { if (text == null) throw new ArgumentNullException(nameof(text)); this.text = text; } /// Gets the text whose code points are being enumerated. public string Text { get { return text; } } /// Gets an enumerator which can be used to enumerate the code points in the text. /// public PermissiveCodePointEnumerator GetEnumerator() { return new PermissiveCodePointEnumerator(text); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } }