2013-09-26 10 views
7

Mam przeczucie, że może się zredukować do sytuacji "dummy-on-me", "las za drzewami", a jeśli tak, to z góry, mea culpa. Ale dla życia mnie ja tylko nie rozumiejąc dlaczego następujący wiersz nie zostanie skompilowany w C#, zakładając myRegEx jest RegEx przedmiot i myString jest celem wywołania metody Match, co następuje:Dlaczego nie mogę połączyć się z Select() z obiektu CaptureCollection?

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

odniesienie .Captures powinien dostać mnie do CaptureCollection, który realizuje IEnumerable i IEnumerable oferuje metodę rozszerzenia Select dla transformacji jak już próbowano tu zadzierać właściwość Value dla każdego elementu w kolekcji i popychając go do tablicy ciągów.

Jednak kompilator szczeka na mnie

„System.Text.RegularExpressions.CaptureCollection nie zawiera definicję«Wybierz»i nie ma metodę rozszerzenia«Select»Przyjmowanie pierwszego argumentu typu System.Text.RegularExpression.CaptureCollection "można znaleźć.

mogę przezwyciężyć poprzez wywołanie metody z obiektu przechwytuje .Cast<Capture>(), a następnie zadzwonić wybrać z transformacji, które z kolei uzyskuje dostęp do własności Value, ale to wydaje się trochę głupie rozważa już obiektów Capture obiektów.

Co robię źle? Z góry dziękuję za wskazanie, co musi być boleśnie oczywistym niedopatrzeniem z mojej strony.

+1

nie robią nic złego. MatchCollection i CaptureCollection implementują tylko 'IEnumerable' not' IEnumerable ' –

+0

AAAAARRRRRGGGHHH !!!!!!!! Oczywiście. Dziękuję Ci. Opublikuj to jako odpowiedź i chętnie się z tym zgodzę. –

Odpowiedz

9

Nie robisz nic złego. MatchCollection i CaptureCollection wdrożyć tylko IEnumerable interfejs nie IEnumerable<T>

Dlatego trzeba Cast<T>or OfType<T>

Powiązane problemy