2013-09-26 10 views
7

Ho la pessima sensazione che questo possa ridursi a una situazione da dummy-on-me, foresta per alberi, e se questo è il caso, mea culpa in anticipo. Ma per la vita di me non sto solo capire il motivo per cui la seguente linea non compilerà in C#, assumendo myRegEx è un oggetto RegEx e myString è il bersaglio di una chiamata al metodo Match, come segue:Perché non posso chiamare Select() da un oggetto CaptureCollection?

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

il riferimento .Captures mi dovrebbe arrivare al CaptureCollection, che implementa IEnumerable, e IEnumerable offre un metodo di estensione Select per una trasformazione come ho cercato qui, sbavatura la proprietà Value per ogni elemento della collezione e spingendolo in una matrice di stringhe.

Tuttavia, il compilatore abbaia verso di me con

'System.Text.RegularExpressions.CaptureCollection non contiene una definizione per 'Seleziona' e nessun metodo di estensione 'Seleziona' accettazione di una prima argomento di tipo Si può trovare System.Text.RegularExpression.CaptureCollection '.

posso superare questo chiamando il metodo .Cast<Capture>() dall'oggetto Cattura, e quindi chiamare selezionate con una trasformazione che, a sua volta, accede alla proprietà Value, ma che sembra un po 'sciocco considerare gli oggetti già sonoCapture oggetti.

Cosa sto sbagliando? Mille grazie in anticipo per aver segnalato ciò che dev'essere una svista dolorosamente ovvia da parte mia.

+1

non si sta facendo nulla di male. MatchCollection e CaptureCollection implementano solo "IEnumerable" non "IEnumerable " –

+0

AAAAARRRRRGGGHHH !!!!!!!! Ovviamente. Grazie. Posta come risposta e sarò lieto di accettare. –

risposta

9

Non stai facendo niente di male. MatchCollection e CaptureCollection implementare solo IEnumerable interfaccia non IEnumerable<T>

Questo è il motivo per cui è necessario Cast<T>or OfType<T>

Problemi correlati