.NET Framework Fendre la chaîne en blocs de longueur fixe


Exemple

Nous ne pouvons pas briser une chaîne en points arbitraires (parce qu'un System.Char peut ne pas être valide seul parce qu'il est un personnage combinant ou partie d'un substitut) puis le code doit tenir compte (notez que avec la longueur que je veux dire le nombre de graphèmes pas nombre d' unités de code ):

public static IEnumerable<string> Split(this string value, int desiredLength)
{
    var characters = StringInfo.GetTextElementEnumerator(value);
    while (characters.MoveNext())
        yield return String.Concat(Take(characters, desiredLength));
}

private static IEnumerable<string> Take(TextElementEnumerator enumerator, int count)
{
    for (int i = 0; i < count; ++i)
    {
        yield return (string)enumerator.Current;

        if (!enumerator.MoveNext())
            yield break;
    }
}