7

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

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

.Captures引用应该让我找到 ,它实现了,CaptureCollectionIEnumerable提供了一个转换IEnumerable的扩展方法Select,正如我在这里尝试的那样,Value为集合中的每个项目获取属性并将其推送到字符串数组中。

但是,编译器对我咆哮

“System.Text.RegularExpressions.CaptureCollection 不包含“Select”的定义,并且找不到接受 System.Text.RegularExpression.CaptureCollection 类型的第一个参数的扩展方法“Select”。

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

我究竟做错了什么?非常感谢您指出我必须是一个痛苦的明显疏忽。

4

1 回答 1

11

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

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

于 2013-09-26T18:14:24.727 回答