Определение Substring()
метода в .net System.String
класс, как этоНеожиданное поведение подстроки в C#
public string Substring(int startIndex)
Где startIndex
является «с нуля позиция начального символа подстроки в данном случае», как по определению метода. Если я правильно понимаю, это означает, что он даст мне часть строки, начиная с нулевого индекса.
Теперь, если у меня есть строка "ABC"
и возьмите подстроку с разными индексами, я получаю следующие результаты.
var str = "ABC";
var chars = str.ToArray(); //returns 3 char 'A', 'B', 'C' as expected
var sub2 = str.Substring(2); //[1] returns "C" as expected
var sub3 = str.Substring(3); //[2] returns "" ...!!! Why no exception??
var sub4 = str.Substring(4); //[3] throws ArgumentOutOfRangeException as expected
Почему это не исключает исключение для случая [2] ??
Строка имеет 3 символа, поэтому индексы [0, 1, 2]
, и даже ToArray()
, ToCharArray()
метод возвращает 3 символа, как ожидалось! Не следует ли исключать исключение, если я попытаюсь установить Substring()
со стартовым индексом 3
?
Может быть символом '\ 0' (чтобы отметить конец строки). Но я не уверен, использует ли это .NET. Стоит google хотя – Stefan
строка 1246 @ http://referencesource.microsoft.com/#mscorlib/system/string.cs,1246 –
Спасибо @AlexK. и другие (ответы) для указания документации по внедрению и MSDN. Я вижу, как это сделала команда фреймворков, но для меня (и немногих других, я думаю) это нечто неожиданное! –