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

7

我有一种可怕的感觉,这可能会降低到对我来说是个哑巴问题,因为我看不到整个森林,如果是这样的话,请提前向我道歉。但是我就是不明白为什么下面这行代码在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'不包含名为'Select'的定义,并且也没有接受类型为'System.Text.RegularExpression.CaptureCollection'的第一个参数的扩展方法'Select'。

我可以通过从Captures对象调用.Cast<Capture>()方法,然后使用一个转换操作来访问Value属性,以此来克服这个问题,但考虑到这些对象已经是Capture对象,这似乎有点傻。
我做错了什么?非常感谢您提前指出我可能会犯的一个非常明显的错误。

3
ن½ و²،وœ‰هپڑé”™ن»»ن½•ن؛‹وƒ…م€‚MatchCollectionه’ŒCaptureCollectionهڈھه®‍çژ°ن؛†IEnumerable而ن¸چوک¯IEnumerable<T>م€‚ - L.B
AAAAARRRRRGGGHHH!!!!!!!! 当然。谢谢。请将其作为答案发布,我很乐意接受。 - David W
1个回答

12

您没有做错任何事情。 MatchCollectionCaptureCollection仅实现了IEnumerable接口,而不是IEnumerable<T>

这就是为什么您需要使用Cast<T>OfType<T>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接