为什么我不能从CaptureCollection对象调用Select()?

Dav*_*d W 7 c# regex

我有一种可怕的感觉,这种情况可能会减少到对我而言,以森林为树的情况,如果是这样的话,请提前告诉我.但对于我的生活,我只是不明白为什么以下行不会在C#中编译,假设myRegEx是一个RegEx对象并且myString是调用该Match方法的目标,如下所示:

String[] results = myRegEx.Matches(myString)[0].Groups["Group1"].Captures.Select(x => x.Value).ToArray<String>();
Run Code Online (Sandbox Code Playgroud)

.Captures引用应该让我CaptureCollection实现IEnumerable,并且IEnumerable提供了Select一个转换的扩展方法,就像我在这里尝试的那样,Value为集合中的每个项目捕获属性并将其推入字符串数组.

然而,编译器咆哮着我

'System.Text.RegularExpressions.CaptureCollection不包含'Select'的定义,也没有扩展方法'Select'接受System.Text.RegularExpression.CaptureCollection'类型的第一个参数.

我可以通过调用.Cast<Capture>()Captures对象中的方法来解决这个问题,然后使用转换来调用select,而转换又会访问Value属性,但考虑到对象已经 Capture对象,这似乎有点傻.

我究竟做错了什么?非常感谢你指出我本来应该是一个非常明显的疏忽.

L.B*_*L.B 11

你没有做错任何事.MatchCollectionCaptureCollection只实现IEnumerable接口IEnumerable<T>

这就是你需要的原因 Cast<T> or OfType<T>