为什么超出范围的索引不会为 Regex GroupCollection 引发异常?



通常,如果你试图访问一个不存在的数组成员,你会得到一个"IndexOutOfRangeException"

然而,由于某种原因,我没有得到一个Regex GroupCollection。

例如:

var match = Regex.Match("", "a");
var test = match.Groups[6];

不抛出异常,尽管match只有一个组。

为什么会发生这种情况?

这是故意的。

参见GroupCollection文档:

如果groupnum不是集合成员的索引或者,如果groupnum是输入字符串中未匹配的捕获组的索引,则该方法返回一个group对象,其group。Success属性为false,其Group.Value属性为String.Empty.

我保留了句子的开头,因为它描述了您当前的场景:aregex模式在空字符串中找不到匹配,匹配为空,并且没有ID = 6的组。

最新更新