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

本文关键字:调用 Select 对象 CaptureCollection 不能 为什么 | 更新日期: 2023-09-27 18:32:52

我有一种可怕的感觉,这可能会沦为一个假人,森林换树的情况,如果是这样的话,请提前过错。但是对于我的生活,我只是不明白为什么以下行不会在 C# 中编译,假设 myRegEx 是一个RegEx对象,myString是调用 Match 方法的目标,如下所示:

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

.Captures引用应该让我进入CaptureCollection,它实现了IEnumerable,并且IEnumerable提供了一个扩展方法Select我在这里尝试的转换,抓住集合中每个项目的 Value 属性并将其推送到字符串数组中。

但是,编译器对我咆哮

'System.Text.RegularExpressions.CaptureCollection 不包含 定义"选择",没有扩展方法"选择"接受 类型的第一个参数 可以找到System.Text.RegularExpression.CaptureCollection'。

我可以通过从 Captures 对象调用 .Cast<Capture>() 方法来解决此问题,然后使用转换调用 select,该转换反过来访问 Value 属性,但考虑到对象已经Capture对象,这似乎有点愚蠢。

我做错了什么?提前非常感谢您指出我必须痛苦地明显的疏忽。

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

你没有做错任何事。MatchCollectionCaptureCollection 仅实现IEnumerable接口而不实现IEnumerable<T>

这就是为什么你需要Cast<T> or OfType<T>