Проблема в том, что вы пытаетесь получить больше символов, чем в вашем массиве.
Расширения лучше всего подходят для таких задач, как эта;) У моего имени есть какое-то грязное имя, но все знают, что оно будет делать - это безопасная подстрока:
public static string SubstringNoLongerThenSource(this string source, int startIndex, int maxLength)
{
return source.Substring(startIndex, Math.Min(source.Length - startIndex, maxLength));
}
Так что в вашей точной проблеме это должно быть так:
String num = line.SubstringNoLongerThenSource((line.Length - 3), 3);
System.Console.WriteLine(num);
Так что num будет иметь максимум 3 буквы, если в строке, которую вы предоставляете для функции, достаточно букв:)