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 sąCapture
obiektów.
Co robię źle? Z góry dziękuję za wskazanie, co musi być boleśnie oczywistym niedopatrzeniem z mojej strony.
nie robią nic złego. MatchCollection i CaptureCollection implementują tylko 'IEnumerable' not' IEnumerable' –
AAAAARRRRRGGGHHH !!!!!!!! Oczywiście. Dziękuję Ci. Opublikuj to jako odpowiedź i chętnie się z tym zgodzę. –