Неожиданное поведение подстроки

Я столкнулся с этим поведением сегодня при использовании метода Substring :

static void Main(string[] args) {
    string test = "123";
    for (int i = 0; true; i++) {
        try {
            Console.WriteLine("\"{0}\".Substring({1}) is \"{2}\"", test, i, test.Substring(i));
        } catch (ArgumentOutOfRangeException e) {
            Console.WriteLine("\"{0}\".Substring({1}) threw an exception.", test, i);
                break;
        }
    }
}

. Выход:

"123".Substring(0) is "123"
"123".Substring(1) is "23"
"123".Substring(2) is "3"
"123".Substring(3) is ""
"123".Substring(4) threw an exception.

"123".Substring (3 )возвращает пустую строку, а "123".Substring (4 )вызывает исключение. Однако "123"[3] и "123"[4] находятся за пределами допустимого диапазона. Это задокументировано в MSDN , но мне трудно понять, почему метод Substring написан таким образом. Я ожидаю, что любой индекс -из -границ либо всегда приведет к исключению, либо всегда приведет к пустой строке. Любое понимание?

12
задан Uli Köhler 4 October 2015 в 14:41
поделиться