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

时间:2013-09-26 18:08:04

标签: c# regex

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

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

.Captures引用应该让我转到实现CaptureCollection的{​​{1}},IEnumerable为我提供转换的扩展方法IEnumerable在这里尝试,为集合中的每个项目绑定Select属性并将其推入字符串数组。

然而,编译器咆哮着

  

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

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

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

1 个答案:

答案 0 :(得分:11)

你没有做错任何事。 MatchCollection CaptureCollection 仅实现IEnumerable接口IEnumerable<T>

这就是您需要Cast<T> or OfType<T>

的原因