【发布时间】:2012-07-27 03:29:35
【问题描述】:
我今天在使用 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] 都超出了范围。这是documented on MSDN,但我很难理解为什么 Substring 方法是这样写的。我希望任何越界索引要么总是导致异常,要么总是导致空字符串。有什么见解吗?
【问题讨论】:
-
你的问题是为什么 Substring(3) 会返回不同的结果给 Substring(4)?
-
抱歉,这里的越界索引在哪里?
-
Daniel:test.Substring(3) 和 test.Substring(4) 都提供越界索引,但它们的行为不同。
-
SubString(3)仅在您期望(要求)非空结果时才超出范围。