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 メソッドがこのように記述されている理由を理解するのに苦労しています。範囲外のインデックスは、常に例外が発生するか、常に空の文字列になると予想されます。洞察はありますか?