Dans une combinaison de réponses de Colombe+Konstatin...
static IEnumerable<string> WholeChunks(string str, int chunkSize) {
for (int i = 0; i < str.Length; i += chunkSize)
yield return str.Substring(i, chunkSize);
}
Cela fonctionnera pour toutes les chaînes de caractères qui peuvent être divisées en un nombre entier de morceaux, sinon une exception sera levée.
Si vous souhaitez prendre en charge les chaînes de caractères de toute longueur, vous pouvez utiliser le code suivant :
static IEnumerable<string> ChunksUpto(string str, int maxChunkSize) {
for (int i = 0; i < str.Length; i += maxChunkSize)
yield return str.Substring(i, Math.Min(maxChunkSize, str.Length-i));
}
Cependant, le PO a explicitement déclaré qu'il n'en avait pas besoin ; c'est un peu plus long et plus difficile à lire, légèrement plus lent. Dans l'esprit de KISS et YAGNI, je choisirais la première option : c'est probablement l'implémentation la plus efficace possible, et elle est très courte, lisible, et lève une exception pour les entrées non conformes.