小编Pet*_*tte的帖子

令人惊讶的子串行为

我在使用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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

"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.
Run Code Online (Sandbox Code Playgroud)

"123".Substring(3)返回一个空字符串,"123".Substring(4)抛出异常.然而,"123"[3]和"123"[4]都是出界的.这在MSDN上记录,但我很难理解为什么以这种方式编写Substring方法.我希望任何越界索引要么总是导致异常,要么总是导致空字符串.任何见解?

c# string

12
推荐指数
1
解决办法
5662
查看次数

标签 统计

c# ×1

string ×1