static IEnumerable<string> Split(string str, int chunkSize)
{
IEnumerable<string> retVal = Enumerable.Range(0, str.Length / chunkSize)
.Select(i => str.Substring(i * chunkSize, chunkSize))
if (str.Length % chunkSize > 0)
retVal = retVal.Append(str.Substring(str.Length / chunkSize * chunkSize, str.Length % chunkSize));
return retVal;
}
Он корректно обрабатывает длину входной строки, не делящуюся на chunkSize.
Обратите внимание, что для изящного управления случаями краев может потребоваться дополнительный код (пустая или пустая строка ввода, chunkSize == 0).