Я столкнулся с этим поведением сегодня, используя метод 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 написан таким образом. Я ожидаю, что любой индекс вне пределов всегда будет приводить к исключению или всегда приводит к пустой строке. Любое понимание?