C# Substring 常用有两个参数。
startIndex:[0, 字符串长度]
允许的最小值:0。
允许的最大值:字符串长度。注意是字符串长度,不是字符串长度 - 1。实际使用中,我们会发现,这还真有用,省去了我们一道判断。比如:
string s = "abc-123"; int pos = s.IndexOf("-"); if (pos >= 0) { string r = s.Substring(pos + 1); }
如果 s 不是 abc-123,而是 abc-,上面的代码也不会报错。
顺便说一下,刚刚越界,其值为空(零长度字符串),不是 null。如下:
var s = "1"; Response.Write(s.Substring(1) == ""); // True。
length:[0, 字长串长度 - startIndex]
允许的最小值:0。此时返回结果为零长度字符串。
允许的最大值:startIndex + length 不超过字符串长度。
string s = "1234"; Console.Write(s.Substring(2, 3)); // 出错
综合来看
Substring 的 2 个参数:只有第 1 个参数,其指向可以向右越界 1 个,其他情况都必须直接指向或间接指向字符串内部。