加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:04:43 所属栏目:百科 来源:网络整理
导读:我有一种可怕的感觉,这种情况可能会减少到对我而言,以森林为树木的情况,如果是这样的话,请提前告诉我.但是对于我的生活,我只是不明白为什么以下行不能在C#中编译,假设myRegEx是一个RegEx对象而myString是调用Match方法的目标,如下所示: String[] results =
我有一种可怕的感觉,这种情况可能会减少到对我而言,以森林为树木的情况,如果是这样的话,请提前告诉我.但是对于我的生活,我只是不明白为什么以下行不能在C#中编译,假设myRegEx是一个RegEx对象而myString是调用Match方法的目标,如下所示:
String[] results = myRegEx.Matches(myString)[0].Groups["Group1"].Captures.Select(x => x.Value).ToArray<String>();

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

然而,编译器咆哮着我

‘System.Text.RegularExpressions.CaptureCollection does not contain a
definition for ‘Select’ and no extension method ‘Select’ accepting a
first argument of type
System.Text.RegularExpression.CaptureCollection’ could be found.

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

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

解决方法

你没有做错任何事. MatchCollection和CaptureCollection仅实现IEnumerable接口而不是IEnumerable< T>

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读