2013-09-26 53 views
7

我有一種可怕的感覺,這可能會把自己縮減爲一個虛擬的我,森林樹木的情況,如果是這樣的話,我會提前做好準備。但對我的生活,我只是不理解爲什麼下面的行不會在C#編譯,假設myRegEx是一個RegEx對象,myString是到Match方法的調用目標,具體如下:爲什麼我不能從CaptureCollection對象調用Select()?

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」。

我可以通過調用從捕捉對象的.Cast<Capture>()方法解決這個問題,然後調用一個選擇變換,反過來,訪問Value財產,但似乎有點傻考慮的對象已經Capture對象。

我在做什麼錯?非常感謝提前指出我的部分必須是一個痛苦明顯的監督。

+1

你沒有做錯什麼。 MatchCollection和CaptureCollection只實現'IEnumerable'而不是'IEnumerable ' –

+0

AAAAARRRRRGGGHHH !!!!!!!!當然。謝謝。發佈作爲答案,我會很高興接受。 –

回答

9

你沒有做錯什麼。 MatchCollectionCaptureCollection僅實施IEnumerable接口不IEnumerable<T>

這就是爲什麼你需要Cast<T>or OfType<T>

相關問題